私はジェネリックを実践しており、次のことを行いました。
以下のように 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
}
}
以下のように type または int の person をインスタンス化しようとしましString
たが、スローされず、エラーが発生しました。
Person<String> p1 = new Person<String>(new String("test"), "test1");
Person<Integer> p2=new Person<>(1,"test");
今、私はクラスの署名をに変更しました
public class Person<T extends Man>{}
そして、タイプの人物を作成することはできなくなりましたString
。なぜこれが起こったのですか?person クラスを、Man のサブクラスであるミュータントではなく、厳密に Man にしたい..どうすればよいですか?
私も以下をやってみました
public abstract class AliveBeing<T>{}
AliveBeing を のスーパークラスにMan
してから試しました
public class Person<Man> extends AliveBeing<Man>{}
現在でも、Man
in にPerson<Man>
はその下に黄色い線があり (型パラメーター Man は type を隠していますMan
)、 AliveBeing の Man にはありません。
Man
コンパイラがinについてのみ混乱するのはなぜPerson<Man>
ですか?