這裏是一些使用get()
方法的枚舉。Java。在枚舉中使用泛型獲取特定類型
public class ZooTest {
public enum Animals {
CHLOE("cat"),
MOLLY("dog"),
LUNA("cat"),
TOBY("dog"),
ZOE("parrot"),
SNICKERS("cat");
private final String type;
Animals(String type) {
this.type = type;
}
public class Animal {
}
public class Cat extends Animal {
}
public class Dog extends Animal {
}
public class Parrot extends Animal {
}
public Animal get() {
return "cat".equals(type)
? new Cat()
: "dog".equals(type)
? new Dog()
: new Parrot();
}
}
@Test
public void shouldReturnSpecificClass() {
assertTrue(Animals.CHLOE.get() instanceof Cat);
}
@Test(expectedExceptions = {ClassCastException.class})
public void shouldReturnSpecificClass2() {
Dog dog = (Dog) Animals.CHLOE.get();
}
}
問題是,如何改進以返回特定類型的動物而不使用外部枚舉類型投射。當然,我可以使用如下方法:
public <T extends Animal> T get(Class<T> clazz) { return (T) get(); }
但也許有一些笨拙的方法。
這看起來像一個枚舉是不適合的。也許更好的做法是將每個動物作爲一個實例,在「動物」類中註明枚舉類型?枚舉用於不改變的值,這是一種不直觀地應用於動物列表的屬性。 – Sinkingpoint
並擺脫字符串常量。在這裏,似乎你可以使用類對象(比如'Cat.class')。 – Thilo
問題:您打算如何使用此設計來實現? – GhostCat