我正在练习仿制药,我做了以下事情。
创建了一个名为 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
}
}
尝试String
如下实例化一个类型或 int 的人,但它没有抛出错误。
Person<String> p1 = new Person<String>(new String("test"), "test1");
Person<Integer> p2=new Person<>(1,"test");
现在我将类签名更改为
public class Person<T extends Man>{}
而且我不能再创造一个类型的人String
。为什么会这样?我希望人类严格是一个人,而不是一个人的子类的突变体。我该怎么做?
我什至尝试执行以下操作
public abstract class AliveBeing<T>{}
使 AliveBeing 成为超类,Man
然后尝试
public class Person<Man> extends AliveBeing<Man>{}
即使是现在,Man
inPerson<Man>
下面还有黄线(类型参数 Man 隐藏了 type Man
),而 Man in AliveBeing 没有。
为什么编译器只对Man
in感到困惑Person<Man>
?