我正在練習泛型,我做了以下操作。類型參數E隱藏類型E.類的泛型模板
創建一個名爲man的類,如下所示。
public class Man{
int hands=2;
int legs=2;
boolean alive;
public Man(boolean b) {
// TODO Auto-generated constructor stub
alive=b;
}
}
創建了一個名爲Person類
public class Person<Man> {
Man p;
String name;
public Person(Man p, String name) {
this.p = p;
this.name = name;
}
public Person() {
// TODO Auto-generated constructor stub
}
}
試圖一個人字符串類型的實例或者按照下面的詮釋,它dosent拋出一個錯誤。
Person<String> p1 = new Person<String>(new String("test"), "test1");
Person<Integer> p2=new Person<>(1,"test");
當我仔細檢查,我得到了以下警告。 「類型參數Man是隱藏類型的人」
所以我明白,將Man作爲類Person的類型參數與在Java示例中給出'E'一樣好。它不是Man.class。爲什麼發生這種情況? 如何將我的Man.class分配爲泛型類型參數?
你可以給我一些很好的問題/練習習題來學習泛型。
因爲'Man'是同一個包中類的名字。只需將您的通用名稱從'Person'更改爲'Person '或其他與「Man」或任何其他類別不相似的其他名稱。 –
我不明白。如果你想'Person'參考實際的'Man'類,並且你不希望'Person'和'Person '被允許,那你爲什麼還要使用泛型?看起來你只是想要一個普通的'Person'類,它通常指的是普通的'Man'類,沒有任何參數化。 –
ruakh
人既不是人的子類也不是超人類。如果我有動物和植物類型的類,我想限制它們被用作Person的泛型類型。 – DJR