我有一個基本問題,但我不知道如何解決。請幫助我!
如果我有課 Zoo
public class Zoo{
private Animal animal;
private Long age;
}
和 Animalpara是這樣的:
public class Animal{
private String name;
}
但現在我有一個新類是:Dog類,擴展動物
public class Dog extends Animal {
private String dogClass;
}
我想讓animal屬性Zoo也接受Dog類引數,我該怎么辦?
有沒有一種優雅的方式來寫它List<? extends Animal>?
uj5u.com熱心網友回復:
您無需更改任何內容:作為Dogextends Animal,它可以分配給 field Zoo.animal。但是,您可以添加一個方法Zoo來獲取animal特定類的實體:
public <T extends Animal> T getAnimal(Class<T> animalClass) {
return animalClass.cast(animal);
}
或者,如果您不希望它在animal不屬于指定類的情況下引發例外:
public <T extends Animal> T getAnimal(Class<T> animalClass) {
if (!animalClass.isInstance(animal)) {
return null;
}
return animalClass.cast(animal);
}
更新:
但也許你想要的是一個 typed Zoo:
public class Zoo<T extends Animal> {
private T animal;
private Long age;
public T getAnimal() {
return animal;
}
public setAnimal(T animal) {
this.animal = animal;
}
}
uj5u.com熱心網友回復:
如果我沒記錯的話,要做你所要求的,你所要做的就是在父類和子類中插入建構式并以這種方式關聯它們的值:
public class Animal{
private String name;
public Animal(String name){
this.name = name;
}
}
public class Dog extends Animal{
private String dogClass;
public Dog(){
super(dogClass);
}
}
此外,如果您已經計劃從不直接實體化 Animal 類,因為它是一個通用物件,您可以將其設為抽象。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408806.html
標籤:
上一篇:使用相同的方法將1添加到可以是float或int的強制轉換字串
下一篇:要在EntityFramework中播種型別表,我需要一個通用方法,該方法采用列舉并創建型別物件和名稱屬性的串列
