Java 如何使用每个对象的返回类型声明类型间方法';什么课?
在我的AspectJ项目中,我有如下代码:Java 如何使用每个对象的返回类型声明类型间方法';什么课?,java,aspectj,aop,Java,Aspectj,Aop,在我的AspectJ项目中,我有如下代码: public aspect MyAspect { public Object MyInterface.getMyself() { return this; } } public interface MyInterface { } public class MyClassOne implements MyInterface {} public class MyClassTwo implements MyInterfa
public aspect MyAspect {
public Object MyInterface.getMyself() {
return this;
}
}
public interface MyInterface {
}
public class MyClassOne implements MyInterface {}
public class MyClassTwo implements MyInterface {}
那么,AspectJ如何在类型间声明中注入代码呢?还有,有没有一种方法可以代替将MyInterface.getimf()
声明为Object
,而声明为this.getClass()
或类似的东西,即在适用的情况下注入MyClassOne
和MyClassTwo
aspect MyAspect {
public S MyInterface<S>.getMyself() {
return (S) this;
}
}
interface MyInterface<T extends MyInterface<T>> {
}
class MyClassOne implements MyInterface<MyClassOne> {}
class MyClassTwo implements MyInterface<MyClassTwo> {}
class Main {
public static void main(String[] args) {
MyClassOne aClassOne = new MyClassOne().getMyself();
MyClassTwo aClassTwo = new MyClassTwo().getMyself();
MyClassOne errorClassOne = new MyClassTwo().getMyself(); // compile error
MyClassTwo errorClassTwo = new MyClassOne().getMyself(); // compile error
}
}
aspect MyAspect{
public的MyInterface.getimf(){
归还本文件;
}
}
接口MyInterface{
}
类MyClassOne实现MyInterface{}
类MyClass2实现MyInterface{}
班长{
公共静态void main(字符串[]args){
MyClassOne aClassOne=新的MyClassOne().getimf();
MyClassTwo aClassTwo=新的MyClassTwo();
MyClassOne errorClassOne=新的MyClass2().GetIf();//编译错误
MyClassTwo errorClassTwo=新的MyClassOne().GetIf();//编译错误
}
}
仿制药的乐趣!我想答案是直截了当的,但如果这让您感到困惑,请告诉我。试试这个:
aspect MyAspect {
public S MyInterface<S>.getMyself() {
return (S) this;
}
}
interface MyInterface<T extends MyInterface<T>> {
}
class MyClassOne implements MyInterface<MyClassOne> {}
class MyClassTwo implements MyInterface<MyClassTwo> {}
class Main {
public static void main(String[] args) {
MyClassOne aClassOne = new MyClassOne().getMyself();
MyClassTwo aClassTwo = new MyClassTwo().getMyself();
MyClassOne errorClassOne = new MyClassTwo().getMyself(); // compile error
MyClassTwo errorClassTwo = new MyClassOne().getMyself(); // compile error
}
}
aspect MyAspect{
public的MyInterface.getimf(){
归还本文件;
}
}
接口MyInterface{
}
类MyClassOne实现MyInterface{}
类MyClass2实现MyInterface{}
班长{
公共静态void main(字符串[]args){
MyClassOne aClassOne=新的MyClassOne().getimf();
MyClassTwo aClassTwo=新的MyClassTwo();
MyClassOne errorClassOne=新的MyClass2().GetIf();//编译错误
MyClassTwo errorClassTwo=新的MyClassOne().GetIf();//编译错误
}
}
仿制药的乐趣!我想答案是直截了当的,但如果这让您感到困惑,请告诉我。那么您想在GetIlly()中返回MyClassOne或MyClassII的实例吗?嗯,是的。。。正如我所写的,我不知道代码注入是如何工作的,但我的目标是当从
MyClassOne
的实例调用getimf()
时,返回MyClassOne
的实例。当从该类的实例调用MyClassTwo
时,我知道我可以返回泛型(t…
),但这并不是我想要的,没有泛型或者为每个实现类创建一个新的ITD,就无法做到这一点。我可以为您编写一个泛型解决方案,我认为这将是一个很好和优雅的解决方案。@Andrew,我很乐意听取您的建议。:)顺便说一句,什么是ITD?那么您想在getMy()中返回MyClassOne或MyClassTwo的实例吗?是的。。。正如我所写的,我不知道代码注入是如何工作的,但我的目标是当从MyClassOne
的实例调用getimf()
时,返回MyClassOne
的实例。当从该类的实例调用MyClassTwo
时,我知道我可以返回泛型(t…
),但这并不是我想要的,没有泛型或者为每个实现类创建一个新的ITD,就无法做到这一点。我可以为您编写一个泛型解决方案,我认为这将是一个很好和优雅的解决方案。@Andrew,我很乐意听取您的建议。:)顺便问一下,什么是ITD?