假设我有以下界面
public interface I {
public int evaluate();
}
和以下课程
public class A {
// ...
public int getX(){}
public int evaluateX(I model){
return model.evaluate();
}
}
然后,我可以实现I
这样的
class Model implements I {
@Override
public int evaluate() {
return getX() + 1;
}
}
其中实现正在调用类A
的方法?
我知道反思,但我想知道静态技术 谢谢
答案 0 :(得分:3)
简单的答案是否定的。
此外,这看起来像紧耦合,因为接口必须知道它被注入的类。
您可能想要做的是使用evaluate
对int
方法及其实现进行参数化,以便在类getX()
中调用时可以将其作为A
传递,然后在1
班级的Model
实施中按evaluate
递增。
修改强>
根据Andy Thomas的建议,您可能希望进一步概括。
不是使用evaluate
对int
进行参数化,而是使用声明int getX()
方法的接口对其进行参数化(A
随后将实现该方法)。
反过来,A
会调用model.evaluate(this)
,而Model
的{{1}}实施会变为evaluate
。
根据具体情况决定是否有必要。
答案 1 :(得分:1)
为什么不使用lmbdas?看起来你的例子很适合它。
public interface I {
public int evaluate( Supplier<Integer> s);
}
public static class A {
public int getX(){return 5;}
public int evaluateX(I model){
return model.evaluate( () -> getX() );
}
}
public static class Model implements I {
@Override
public int evaluate(Supplier<Integer> s) {
return s.get() + 1;
}
}