方法参数extends class implements interface [英] Method argument extends class implements interface
问题描述
我有以下类和接口:
public class BasicObject{...}
public interface CodeObject{...}
我想创建一个方法,其中参数必须是BasicObject类型并实现CodeObject。我尝试了以下代码,但它不保证clazz是一个实现CodeObject的类。
I want to create a method in which the argument needs to be of type BasicObject and implements CodeObject. I tried the following code but it doesn't guarantee clazz to be a class that implements CodeObject.
myMethod(Class<? extends BasicObject> clazz){...}
我想做这样的事情,但它没有编译:
I want to do something like this but it doesn't compile:
myMethod(Class<? extends BasicObject implements CodeObject> clazz){...}
推荐答案
您的模式类必须扩展 BasicObject
并扩展/实现 CodeObject
(实际上是一个接口)。您可以使用方法签名的通配符定义中声明的多个类来执行此操作,如下所示:
Your pattern class has to extend BasicObject
and extend/implement CodeObject
(which is actually an interface). You can do it with multiple classes declared in the wildcard definition of the method signature, like this:
public <T extends BasicObject & CodeObject> void myMethod(Class<T> clazz)
请注意,如果你这样做,它将无效这些方式:
Note that it won't work if you do it any of these ways:
-
public< T extends BasicObject,CodeObject> void myMethod(Class< T> clazz)
这是技术上有效的语法,但 CodeObject
未使用;该方法将接受任何扩展 BasicObject
的类,无论它们是否扩展/实现 CodeObject
。
This is technically valid syntax, but CodeObject
is unused; the method will accept any classes that extends BasicObject
, no matter whether they extend/implement CodeObject
.
public void myMethod(Class<?extends BasicObject& CodeObject> clazz)
public void myMethod(Class<?extends BasicObject,CodeObject> clazz)
根据Java,这些只是错误的语法。
These are just wrong syntax according to Java.
这篇关于方法参数extends class implements interface的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!