Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型-有什么区别?_Java_Generics - Fatal编程技术网

Java泛型-有什么区别?

Java泛型-有什么区别?,java,generics,Java,Generics,考虑到我有以下接口: public interface MyInterface<T extends Number> 公共接口MyInterface 在另一个类中,我想声明如下方法: public <T extends MyInterface<?>> void abc(T a); public有些接口打算将实现类作为泛型类型 例如,可比接口通常实现为: class MyClass implements Comparable<MyClass>

考虑到我有以下接口:

public interface MyInterface<T extends Number>
公共接口MyInterface
在另一个类中,我想声明如下方法:

public <T extends MyInterface<?>> void abc(T a);

public有些接口打算将实现类作为泛型类型

例如,
可比
接口通常实现为:

class MyClass implements Comparable<MyClass>
Comparable
中声明的可用于将
MyClass
的一个实例与同一类的另一个实例进行比较

其他接口具有不同类型的泛型参数。例如,
List
,其中
T
表示列表中包含的对象类型

如果使用以下命令声明方法:

public <T extends MyInterface<T>> void abc(T a);
public <T extends MyInterface<?>> void abc(T a):
然后,在
T
MyInterface
实现中,您不会对泛型类型施加任何约束

另一个选择是

public void abc(MyInterface<?> a);
公共作废abc(MyA接口);

哪种方法最简单,可以接受任何
MyInterface

的实现请告诉我们您想要实现什么,您的用例和您想要的继承模型,然后我们将能够提供帮助。另外,我认为第二种声明不是您想要的。如果T=MyClass,那么声明将公开,这就是您在用例中需要的吗?我用第一个声明实现了我的目标,但我在某处看到了第二个声明,我只是想知道它们之间的区别。谢谢你的回答,谢谢你的解释。现在我明白了区别
public <T extends MyInterface<?>> void abc(T a):
public void abc(MyInterface<?> a);