Hallo,
Mit AspectJ ist man ja in der Lage mittels Intertype Declaration Klassen zu erweitern. Jedoch hab ich das bisher nur bei Klassen geschafft, für die ich auch Source habe. Also für Selbstdefinierte Klassen.
Nun möchte ich gerne andere, fremde Bibliotheken auch erweitern können, ohne den Source code anfasse zu müssen.
Ich hätte nun gedacht, dass ich mit folgenden code die String Klasse erweitern kann.
Zum Einen bekomme ich eine Warnung im Aspect MyString:
this affected type is not exposed to the weaver: java.lang.String [Xlint:typeNotExposedToWeaver]
Wenn ich die Methode versuche auszuführen, bekomme ich folgende Exception:
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.reverse()Ljava/lang/String;
at MyString.ajc$interMethodDispatch1$mypackage_MyString$java_lang_String$reverse(MyString.aj)
Ich denke, dass es daran liegt, dass die String Klasse halt nur als .jar vorliegt und nicht als .java.
Hat jemand das Problem schon mal gelöst?
Gruß Florian
Mit AspectJ ist man ja in der Lage mittels Intertype Declaration Klassen zu erweitern. Jedoch hab ich das bisher nur bei Klassen geschafft, für die ich auch Source habe. Also für Selbstdefinierte Klassen.
Nun möchte ich gerne andere, fremde Bibliotheken auch erweitern können, ohne den Source code anfasse zu müssen.
Ich hätte nun gedacht, dass ich mit folgenden code die String Klasse erweitern kann.
Java:
public aspect MyString {
public String java.lang.String.reverse(){
StringBuffer s = new StringBuffer(this);
return s.reverse().toString();
}
}
Zum Einen bekomme ich eine Warnung im Aspect MyString:
this affected type is not exposed to the weaver: java.lang.String [Xlint:typeNotExposedToWeaver]
Wenn ich die Methode versuche auszuführen, bekomme ich folgende Exception:
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.reverse()Ljava/lang/String;
at MyString.ajc$interMethodDispatch1$mypackage_MyString$java_lang_String$reverse(MyString.aj)
Ich denke, dass es daran liegt, dass die String Klasse halt nur als .jar vorliegt und nicht als .java.
Hat jemand das Problem schon mal gelöst?
Gruß Florian