gpt4 book ai didi

Java多态性 - 从父 map 获取子命令

转载 作者:行者123 更新时间:2023-11-30 07:44:45 27 4
gpt4 key购买 nike

我创建了两个类 - BuildingWarehouseWarehouse 扩展 Building。我创建了 Building map (building_map),其中放置了 Building 对象和 Warehouse 对象。我想通过 map 获取 Warehouse 的方法,但我只能看到来自 Building 类的内容。

building_map.get(ware_id);   /*--Warehouse_function--*/;

(这是我在这里的第一篇文章之一,如果我对我的问题提供的信息太少,我深表歉意)

编辑:以下是我如何将对象添加到 map 中:

        public static Map<String, Building> building_map = new HashMap<>();

Building bD_02 = new Building("bD_02", 2, "Duargian", 2.5, 180, 450, 100, ""
+ "i0_024!i0_029!i0_036?90!10!10!" //upgrade lv 1
+ "&"
+ "" //upgrade lv 2
+ "&"
+ "" //upgrade lv 3
+ "&");

Building bD_03 = new Warehouse("bD_03", 3, "Duargian", 2.8, 800, 2500, 1500, 2.35, 3000, ""
+ "i0_021!i0_024!i0_029?200!500!70!" //upgrade lv 1
+ "&"
+ "" //upgrade lv 2
+ "&"
+ "" //upgrade lv 3
+ "&");

building_map.put("bD_02", bD_02);
building_map.put("bD_03", bD_03);

编辑2:谢谢,TungstenX!成功了,我现在可以关闭主题了。

最佳答案

如果您有一张 Building 的 map ,则并非那里的每个对象都必须有一个 Warehouse。它也可以是 Building 或其他实现。

如果您确定它是一个仓库,那么您可以像这样转换它:

Map<String, Building> map = new HashMap<>();
map.put("b", new Building());
map.put("w", new Warehouse());

Warehouse w = (Warehouse) map.get("w");
w.yourMethod();

但请记住,有人可以像这样放置 Bulding 的子项的另一个实例

class OtherClass extends Building {}
map.put("b", new Building());
map.put("w", new Warehouse());
map.put("o", new OtherClass());

Warehouse w = (Warehouse) map.get("b"); // ClassCastException
Warehouse w = (Warehouse) map.get("o"); // ClassCastException

PS:正如@Przemyslaw Kruglej 所建议的,如果您想在运行时 中验证通用集合(如 map )中某个类的实现,您可以在之前使用instanceof类型转换:

Building possibleWarehouse = map.get("w");
if (possibleWarehouse instanceof Warehouse) { // true
Warehouse warehouse = (Warehouse) possibleWarehouse;
}

关于Java多态性 - 从父 map 获取子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312139/

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