gpt4 book ai didi

java - 这个java接口(interface)策略合理吗?

转载 作者:行者123 更新时间:2023-11-30 10:59:44 24 4
gpt4 key购买 nike

我一直在考虑为我的代码实现某种策略。

这是我的设置:

我有一个名为“Object”的接口(interface)。然后我有一个名为“实体”的接口(interface),它扩展了“对象”。然后从实体中产生无数的实现,如“军队”、“城市”、“柠檬”等。

现在,我想将所有这些对象收集到某种形式的 map 中。然后从该映射中我想获得“对象”的特定实现。

我深思熟虑的解决方案如下:

对象有方法:

public Entity getEntity()

Object 的所有实现都返回 null,而 Entity 返回它自己。

同样,在我的实体中:

public Army getArmy()
public City getCity()

这样,我就可以简单地从 map 中拉出一个对象,然后通过一系列空检查从中获取特定的类,就像这样;

Object o = Objects.getObject(2dCoordinates);
Entity e = o.getEntity();
if (e != null){
Army a = e.getArmy();
if (a != null)
a.armySpecificMethod();
}

所有这些都没有使用我讨厌的“instanceof”和转换。

问题是这是否有一些不可预见的问题?在重构我的代码之前,我宁愿向了解的人学习并自己找出答案。

最佳答案

您询问您的策略是否存在任何缺陷。我会说不,因为 C# 使用与他们的 as 相同的策略关键词。示例:e as Army 将返回 e 如果 eArmy,或者 null否则。它基本上是一个转换,而不是失败返回 null

但是您不必使用接口(interface)来实现此功能,您可以编写自己的 as 方法,例如:

static <T> T as(Class<T> clazz, Object obj) {
if (clazz.isInstance(obj)) {
return (T) obj;
}
return null;
}

用法:

Object o = Objects.getObject(2dCoordinates);
Entity e = as(Entity.class, o);
if (e != null) {
Army a = as(Army.class, e);
if (a != null)
a.armySpecificMethod();
}

关于java - 这个java接口(interface)策略合理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31810685/

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