ich Dekorateur sehen über 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>
und bekam einige neugierig wie es in Java implementiert werden, so dass ich suchen und habe einige Beispiel Decorator Design Pattern verwenden.
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>";
}
}
Wie kann ich dies wie das Python Beispiel machen eine Java Annotation oben mit wie diese:
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>";
}
ich ein Problem habe, wenn ich die Probe zu machen versucht, ist das Problem, das ich weiß nicht, wie ich den str
Wert aus dem main
Verfahren zum BoldWrapper
und ItalicWrapper
passieren kann, so kann es verketten und wie sie zurückkehren, so dass die main
Methode kann das Ergebnis anzeigen, das verkettet wurde.
Bitte geben Sie an, wenn etwas mit meinem Verständnis von Annotation nicht stimmt.
Nö, du wirst in der Lage sein, dies zu tun nicht mit Anmerkungen. –
Gibt es eine andere Möglichkeit, es mit Java zu machen, ohne das Decorator Design Pattern zu verwenden? – Crazenezz
Sie können Objektdekoration in Java gut tun, aber nicht mit Anmerkungen. –