繁体   English   中英

如何传递实现接口的参数?

[英]How to pass argument that implements a interface?

我有一个界面:

public interface InterfaceX {
    void methodX();
}

具有接收实现该接口的 object 的方法的 class :

public class AClass {
    public <T extends InterfaceX>  void Method( Class<T> argument ) {
        // ....
    }
}

还有一个实现接口的class,想调用上面的方法..

public class BClass implements InterfaceX {
    @Override
    public void methodX() {
    }

    public void callAClassMethod() {
        AClass aClass = new AClass();
        aClass.Method(this);
    }
}

这个怎么做? 在这段代码中,我有错误:

不存在类型变量 T 的实例,因此 BClass 符合 Class<T>

没有对此进行测试,但如果你想要 class 类型,你必须调用getClass()

public class BClass implements InterfaceX {
    @Override
    public void methodX() {
    }

    public void callAClassMethod() {
        AClass aClass = new AClass();
        aClass.Method(this.getClass());
    }
}

感谢markspace,我找到了解决方案:

public class AClass {
    private List<? extends InterfaceX> myList = new ArrayList<>();
    public <T extends InterfaceX>  void Method( T argument ) {
         myList.add(argument); // error here now... !!
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM