关于为何使用多态参考不完全确定

时间:2015-09-09 01:15:08

标签: java generics polymorphism

好的,基本上我在这里有通用类型T,它实现了Comparable接口。现在说你要迭代一个T对象数组。我已经看到了在迭代时使用T引用的示例以及其他具有Comparable引用的示例,这可能是因为T实现了Comparable。

我的问题是,为什么你会选择另一个;是否有任何真正的实际原因选择可比较的参考而不是T?

该示例显示了对数组的迭代,一个使用Comparable引用,另一个使用T引用。

public static <T extends Comparable<T>> 
        void baz(T[] biz)
{

    for (Comparable d: biz)
    {
        System.out.println(d); //Comparable reference
     }

    for (T foo: biz)
    {
      System.out.println(foo); //T reference        
    }
}

2 个答案:

答案 0 :(得分:1)

System.out.println的情况下,ObjectComparable<T>都需要T(因为所有对象都是Object的实例),所以你可以写for (Object foo : biz)并且它已经在这种情况下工作了。

在一般情况下,选择适用于您需要调用的操作的最常规类型。

答案 1 :(得分:0)

仅在您要比较对象时使用Comparable引用。否则使用T引用,因为您可能希望将对象传递给采用T对象的其他方法。

请记住,标准继承规则适用于此处 - 您可以对T投射Comparable引用(因为您指定T必须扩展Comparable),但您可以&# 39; t将每个Comparable引用转换为T