考虑到我有以下接口:Java泛型 - 有什么区别?
public interface MyInterface<T extends Number>
在另一类我要声明这样一个方法:
public <T extends MyInterface<?>> void abc(T a);
这是一个正确的方法是什么?或者,也许我应该写:
public <T extends MyInterface<T>> void abc(T a);
这两个声明有什么区别?
考虑到我有以下接口:Java泛型 - 有什么区别?
public interface MyInterface<T extends Number>
在另一类我要声明这样一个方法:
public <T extends MyInterface<?>> void abc(T a);
这是一个正确的方法是什么?或者,也许我应该写:
public <T extends MyInterface<T>> void abc(T a);
这两个声明有什么区别?
一些接口旨在将实现类作为泛型类型。
例如,Comparable
接口通常被实现为:
class MyClass implements Comparable<MyClass>
因为然后在Comparable
声明的方法
int compareTo(T o);
可用于的MyClass
实例比较的另一个实例同班。
其他接口具有不同类型的泛型参数。例如,List<T>
,其中T
指示列表中包含的对象的类型。
如果你声明的方法与:
public <T extends MyInterface<T>> void abc(T a);
那么你说,类T
实现在类实现Comparable
接口方式的接口MyInterface
- 以自己为泛型类型。根据MyInterface
的实际情况,这可能也可能不合适。
如果你声明的方法与:
public <T extends MyInterface<?>> void abc(T a):
,那么你不放置任何约束在T
的实施MyInterface
泛型类型。
另一种选择是
public void abc(MyInterface<?> a);
这是编写将接受MyInterface
任何实现的方法,最简单的方法。
感谢您的解释。现在我明白了不同之处 –
请告诉我们你想达到的目标,你的用例以及你想要的继承模型,然后我们将能够提供帮助。 – faizan
另外我不认为第二个声明是你想要的。如果T = MyClass,那么声明就变成了public>,这就是你的用例需要的吗? –
faizan
我是第一次宣布实现自己的目标,但我看到了第二个地方,我只是想知道他们之间的差异。感谢您的回复 –