传递给类的接口如何调用该类中的方法?

时间:2017-06-29 14:38:24

标签: java

假设我有以下界面

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的方法?

我知道反思,但我想知道静态技术 谢谢

2 个答案:

答案 0 :(得分:3)

简单的答案是否定的。

此外,这看起来像紧耦合,因为接口必须知道它被注入的类。

您可能想要做的是使用evaluateint方法及其实现进行参数化,以便在类getX()中调用时可以将其作为A传递,然后在1班级的Model实施中按evaluate递增。

修改

根据Andy Thomas的建议,您可能希望进一步概括。

不是使用evaluateint进行参数化,而是使用声明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;
    }
}