java中的泛型,扩展接口

时间:2014-06-28 09:14:55

标签: java interface extend

在下面的代码中:

class A<T extends InterfaceA & InterfaceB>

它是什么意思&#34; T应该是一种InterfaceA&#34;?

例如下一个代码:

class A<T extends Number>

表示T可以是int,double或任何其他数字类型。 谁能给我一个例子来解释第一个代码?

4 个答案:

答案 0 :(得分:2)

它说T必须是实现interfaceAinterfaceB接口的类型。

你的第二个例子说T必须是任何只实现Number接口的类型。

答案 1 :(得分:1)

class A<T extends interfaceA & interfaceB>表示

T由两个接口限制。因此,传递给T的任何类型参数都必须实现interfaceAinterfaceB

示例程序供您理解: -

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不是任何随机类,并满足一些条件。

相关问题