方法参数扩展类实现接口


问题内容

我有以下类和接口:

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,这些只是错误的语法。