在下面的代码中:
class A<T extends InterfaceA & InterfaceB>
它是什么意思&#34; T应该是一种InterfaceA&#34;?
例如下一个代码:
class A<T extends Number>
表示T可以是int,double或任何其他数字类型。 谁能给我一个例子来解释第一个代码?
答案 0 :(得分:2)
它说T
必须是实现interfaceA
和interfaceB
接口的类型。
你的第二个例子说T
必须是任何只实现Number
接口的类型。
答案 1 :(得分:1)
class A<T extends interfaceA & interfaceB>
表示
T由两个接口限制。因此,传递给T的任何类型参数都必须实现interfaceA
和interfaceB
。
示例程序供您理解: -
interface X{
public void eat();
}
interface Y{
public void drink();
}
class XYZ implements X,Y{
@Override
public void eat(){
System.out.println("I am eating.");
}
@Override
public void drink(){
System.out.println("I am drinkin too!");
}
}
class A<T extends X & Y> {
public void display(){
XYZ x=new XYZ();
x.eat();
x.drink();
System.out.println("Type of XYZ is "+x.getClass().getName());
}
}
public class Sample1{
public static void main(String[] args) {
A<XYZ> a=new A<>();
a.display();
}
}
这意味着传递给T的参数类型必须实现接口X和Y。
如给定代码所示: -
A<XYZ> a=new A<>(); //here only XYZ(substituted in place of T) can be passed because it implements both interface X and interface Y
我希望这能帮助你理解并指出差异!!!
答案 2 :(得分:1)
我会选择@shekhar suman的例子,但我会改变最后一堂课和主要课程:
class A<T extends X & Y> {
public void display(T t){
t.eat();
t.drink();
System.out.println("Type of T is "+t.getClass().getName());
}
}
public static void main(String[] args) {
A<XYZ> a=new A<>();
a.display(new XYZ());
}
答案 3 :(得分:0)
如果没有像这样的延伸: A类&lt; T&gt; A类是一个通用类,接受任何T类。
但是如果是的话 A类&lt; T扩展了InterfaceA&amp; InterfaceB&GT; T可以是实现interfaceA和interfaceB的任何类。
换句话说,你想确保T不是任何随机类,并满足一些条件。