vedo su decorator example in Python:Decorator in Java
def makebold(fn):
def wrapped():
return "<b>" + fn() + "</b>"
return wrapped
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makebold
@makeitalic
def hello():
return "hello world"
print hello() ## returns <b><i>hello world</i></b>
e ottenuto alcuni curiosi come si può implementare in Java, quindi cercare e avuto qualche esempio di utilizzo Decorator Design Pattern.
public class Main {
public static void main(String[] args) {
Wrapper word = new BoldWrapper(new ItalicWrapper());
// display <b><i>hello world</i></b>
System.out.println(word.make("Hello World"));
}
}
public interface Wrapper {
public String make(String str);
}
public class BoldWrapper implements Wrapper {
private Wrapper wrapper;
public BoldWrapper() {
}
public BoldWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
@Override
public String make(String str) {
if(wrapper != null) {
str = wrapper.make(str);
}
return "<b>" + str + "</b>";
}
}
public class ItalicWrapper implements Wrapper {
private Wrapper wrapper;
public ItalicWrapper() {
}
public ItalicWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
@Override
public String make(String str) {
if(wrapper != null) {
str = wrapper.make(str);
}
return "<i>" + str + "</i>";
}
}
come faccio a fare questo come l'esempio Python sopra utilizzando un'annotazione Java come questo:
public class Main {
public static void main(String[] args) {
@BoldWrapper
@ItalicWrapper
String str = "Hello World";
// Display <b><i>Hello World</i></b>
}
}
public @interface BoldWrapper {
public void wrap() default "<b>" + str + "</b>";
}
public @interface ItalicWrapper {
public void wrap() default "<i>" + str + "</i>";
}
Ho avuto qualche problema quando ho cercato di fare il campione, il problema è che non so come posso passare il valore str
dal metodo main
al BoldWrapper
e ItalicWrapper
in modo che possa concatenare e come restituire esso, in modo che ilIl metodopuò visualizzare il risultato che è stato concatenato.
prega di avvisare se c'è qualcosa di sbagliato con la mia comprensione di annotazione.
no, non si sta andando ad essere in grado di fare questo con annotazioni. –
C'è un altro modo per farlo con java senza usare Decorator Design Pattern? – Crazenezz
Si può fare la decorazione di oggetti in Java bene, ma non con le annotazioni. –