方法参数扩展类实现接口
问题内容:
我有以下类和接口:
public class BasicObject{...}
public interface CodeObject{...}
我想创建一个方法,其中参数需要为BasicObject类型并实现CodeObject。我尝试了以下代码,但不能保证clazz是实现CodeObject的类。
myMethod(Class<? extends BasicObject> clazz){...}
我想做这样的事情,但不能编译:
myMethod(Class<? extends BasicObject implements CodeObject> clazz){...}
问题答案:
您的模式类必须扩展BasicObject
和扩展/实现CodeObject
(实际上是一个接口)。您可以使用方法签名的通配符定义中声明的多个类来执行此操作,如下所示:
public <T extends BasicObject & CodeObject> void myMethod(Class<T> clazz)
请注意,如果您通过以下任何一种方式进行操作,则将无法使用:
public <T extends BasicObject, CodeObject> void myMethod(Class<T> clazz)
这是技术上有效的语法,但未CodeObject
使用;该方法将接受任何扩展的类,BasicObject
无论它们是否扩展/实现CodeObject
。
public void myMethod(Class<? extends BasicObject & CodeObject> clazz)
public void myMethod(Class<? extends BasicObject, CodeObject> clazz)
根据Java,这些只是错误的语法。