比如下段代碼,尖括號里那個類是干嘛的?class Employee implements Comparable<Employee> {? public int conpareTo(Employee o) {? ? ? return Double.compare(salary,o.salary);? }}要是沒有那個尖括號,這個實現類里的方法就應該寫成下面這樣,為什么?public int compareTo(Object o) {? ?Employee e = (Employee)o;? ?return Double.compare(salary, e.salary);}
3 回答
已采納

一生放蕩不羈丶人稱小小風
TA貢獻7條經驗 獲得超10個贊
這個嘛.
泛型是用來處理具有相同處理邏輯,但是處理的數據類型不同的情況.
也就是泛型類只指代了邏輯,沒指定處理的數據類型,而在創建泛型類的對象時候進行動態指定數據類型.
尖括號中的內容<E>便是你告知編譯器你創建的這個泛型類對象處理哪種數據類型.比如<Employee>,類型為Employee類對象.
同理繼承一個泛型類的時候你也可以為父類指定處理的類型,這樣繼承的子類就是只針對于某種特定類型進行處理.
比如 a implements b<Employee>.
這樣a類接受的參數類型便限定為只能是Employee.
這樣你便可以看出,你上面的類只能接受Employee類型參數,所以直接使用作為參數的Employee對象的成員變量就好了.
而如果你沒用在尖括號中指定特定的類型.便是使用Object類作為類型參數.接受到的參數為object類型(所有類型的父類),
如果你使用Employee類型作為參數傳遞進來,因為是Object子類所以可以傳遞過來,但是在類中處理的是Object類型,
如果你想使用Employee類中的特有變量,便要將Object類型向下強制轉型為Employee類型對象.
比如: Employee e=(Employee)o;
這樣變可以使用Employee中的字段e.salary.
添加回答
舉報
0/150
提交
取消