通配符可以與<使用>運算符在用於表示未知類型的java 5,引入泛型概念。泛型用於定義一個具有通用格式的成員的類。如果要在創建對象時提供工具,用戶將指定成員的類型,然後您可以使用泛型的概念。它只能用於實例成員不能用於靜態成員的原因,因爲靜態內存只會被分配一次。
在泛型中引入的通配符概念來限制未知類型,比方說我擁有帶有通配符的列表以及此通配符擴展Number封裝類。這意味着列表可以與Integer,Long,Short,Byte一起使用,因爲它們擴展Number包裝類,但不能與String一起作爲String類不擴展Number包裝類。
List<? extends Number> lt = new ArrayList<>();
來到你的節目,你用錯誤的語法,正如我剛纔所說的通配符可以<>操作員使用。
我們不能使用通配符在實例類像波紋管提到 -
List<?> lt = new ArrayList<?>();
但我們可以使用泛型提供字段作爲未知類型像I,N,S的員工類。它的類型,我們將在創建類的對象提供 - 聲明局部變量作爲通配符
public void sortList(List<?> lt)
{
// code to sort the list whether it is integer, String etc
}
call sortList() method
-----------------------
List<String> lt = new List<>();
lt.add("sss");
lt.add("aaa");
sortList(lt);
List<Integer> lt = new List<>();
lt.add(11);
lt.add(12);
sortList(lt);
- -
List<?> lt = new ArayList<String>();
List<?> lt = new ArayList<Integer>();
class Employee<I,N,S>
{
I eid;
N empName;
S empSalary;
}
class Name
{
String firstName;
String middleName;
String lastName;
}
class salary
{
double basic;
float it;
float tds;
double netsal;
}
class CustomId
{
int empId;
String department;
int branchId;
}
main method
------------
Employee<Integer,String,Double> emp = new Employee<>();
Employee<String,Name,Salary> emp2 = new Employee<>();
Employee<CustomId,String,Salary> emp3 = new Employee<>();
通配符作爲方法的參數
我們可以使用通配符和泛型作爲方法的返回類型。 這裏是仿製藥方法的返回類型的例子 -
public T getName(ClassName obj, Key key)
{
return (Type<T>)obj.getType(Key);
}
這裏是作爲方法的返回類型通配符的示例 -
List<?> method(List<?> data)
{
return data;
}
來源
2016-06-23 19:59:44
RCS
因爲這是無效的語法。我沒有看到任何泛型,只是'''s。 –
更好地閱讀泛型章節中通配符的子節(https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html)。您不能直接使用通配符來替換類型。另請參閱網上各種來源提供的更多示例。 –