gpt4 book ai didi

Java轻松快速地创建实例getter

转载 作者:行者123 更新时间:2023-11-29 10:09:17 25 4
gpt4 key购买 nike

我正在存储类,如 HouseCarClothesFacialFeaturesHashMapPerson 的所有部分:

public class Person {
private HashMap<String, PersonalItem> map = new HashMap<String, PersonalItem>();

public void init(){
map.put("house", new House());
map.put("car", new Car());
map.put("clothes", new Clothes());
//etc...

}

public PersonalItem getPersonalItem(String name){
return map.get(name);
}
}

外部使用:

public static void main(String[] args){
Person person = getPerson(args);

//if i want to use car.setColor(blue); i have to do:

((Car) person.getPersonalItem("car")).setColor(blue);

//or if i want to use house.setExterior(wooden); i have to do:

((House) person.getPersonalItem("house")).setExterior(wooden);

}

如果我要使用以下代码,我该如何做到这一点:

person.getPersonalItem("house").setExterior(wooden);

如果输入是“house”,getPersonalItem 会返回 Object instanceof House。我不想每次都写一个 getter:

public House getPersonalItemHouse(){
return (House) map.get("house");
}

还有其他选择吗?

最佳答案

您可以使用的一个(肮脏的?)技巧是使用 Class 对象作为映射的键而不是任意名称,并直接在 getter 中向下转型:

public class Person {
private Map<Class<? extends PersonalItem>, PersonalItem> map = new HashMap<>();

public void init() {
map.put(House.class, new House());
map.put(Car.class, new Car());
map.put(Clothes.class, new Clothes());
//etc...

}

public <T extends PersonalItem> T getPersonalItem(Class<T> cls) {
return (T) map.get(cls);
}

你仍然有一个类型转换,但它仅限于一个地方,当使用 Person 类时你不必知道它:

person.getPersonalItem(House.class).setExterior(wooden);

这种方法的缺点是一个人不能拥有两件相同类型的个人元素。

关于Java轻松快速地创建实例getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com