我正在练习泛型,我做了以下操作。类型参数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