我试图理解为什么我们需要Java Generics中的通配符 - 问号,为什么我们不能只使用正常的单个字符T或E等作为类型?请看以下示例:
C:\wamp64\bin\php
结果是相同的,虽然通配符版本更简洁。这是唯一的好处吗?
答案 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.
}
}