Java Generics为什么我们需要通配符(问号)?

时间:2018-04-20 01:46:29

标签: java generics

我试图理解为什么我们需要Java Generics中的通配符 - 问号,为什么我们不能只使用正常的单个字符T或E等作为类型?请看以下示例:

C:\wamp64\bin\php

结果是相同的,虽然通配符版本更简洁。这是唯一的好处吗?

1 个答案:

答案 0 :(得分:2)

"?"是否可以作为占位符,允许您传递不同类型的对象。

通常,T和?在泛型中用作占位符。即<?><T>

用例:

<?>:当开发人员想要为特定实例允许任何类型的对象时,可以使用它。

  

示例:List<?> listOfObject = new ArrayList<>();在这种情况下   listOfObject可以接受任何扩展的对象   class 对象

<T>:使用复杂类型的对象(DTO)的方法之一。

  

即,如果A类可以为不同的实例提供相同的字段。   但是,有一个字段可以根据类型而变化   实例。同时,它可能是使用泛型的更好方法   

示例:

public Class A<T> {

   private T genericInstance;

   private String commonFields;

   public T getGenericInstance() {
      return this.genericInstance;
   }

   public String getCommonFields() {
      return this.commonFields;
   }

   public static void main(String args[]) {

      A<String> stringInstance = new A<>(); // In this case, 
      stringInstance.getGenericInstance();  // it will return a String instance as we used T as String.

      A<Custom> customObject = new A<>();   // In this case, 
      customObject.getGenericInstance();    // it will return a custom object instance as we used T as Custom class.
   }
}