gpt4 book ai didi

java - 在类结构中找到正确的子类

转载 作者:行者123 更新时间:2023-12-01 15:01:22 25 4
gpt4 key购买 nike

我有一门课,我们称之为ClassA ,以及它的一堆子类,以及这些类的后续子类。 ClassA ,下面的每个类都需要 String在其构造函数中的一个参数上。我有一堆String我需要“转换”为 ClassA 的子类的对象.

我目前的做法是 isType(String)方法检查 String 是否是该子类的一个实例,但使用巨大的 if-else 或 switch-case 语句来查找 ClassA 的正确类型似乎是非常糟糕的编程技术那String是。是否有一种通用的方法可以深入子类结构,或者我一直这样做的方式好吗?

这样做的目的是我正在制作一种脚本语言(用于一个有趣的项目),并且我需要能够识别某些东西是什么。 (数据类型即)

示例代码:

public static boolean isType(String data) {
data = data.trim();
return edu.ata.script.data.Boolean.isType(data)
|| edu.ata.script.data.Integer.isType(data)
|| edu.ata.script.data.Double.isType(data)
|| DATA_STORAGE.contains(data)
|| ReturningMethod.isType(data)
|| edu.ata.script.data.String.isType(data);
}

public static Data get(String data) {
data = data.trim();
/*:)*/ if (edu.ata.script.data.Boolean.isType(data)) {
return edu.ata.script.data.Boolean.get(data);
} else if (edu.ata.script.data.Integer.isType(data)) {
return edu.ata.script.data.Integer.get(data);
} else if (edu.ata.script.data.Double.isType(data)) {
return edu.ata.script.data.Double.get(data);
} else if (DATA_STORAGE.contains(data)) {
return (Data) DATA_STORAGE.get(data);
} else if (ReturningMethod.isType(data)) {
return ReturningMethods.getMethodValue(data);
} else if (edu.ata.script.data.String.isType(data)) {
// Last option because everything is accepted.
return edu.ata.script.data.String.get(data);
} else {
throw new RuntimeException("Could not parse data - " + data);
}
}

最佳答案

我确实理解了完全不同的东西,所以我正在重新编辑这个答案。

我怀疑您正在使用某种导入脚本或其他东西,并且 edu.ata.script.data.* 是您正在编写的 ClassB、ClassC 等,它们知道如何将内容从一种格式转换为另一种格式...(这只是猜测)

我建议摆脱 get(String data) 方法中的所有 if then else ,您可以实现 chain of responsability 。这样,您就可以拥有一个链,将多个 edu.ata.script.data.* 注册到列表中,然后迭代该列表,直到其中一个为 isType(string) 返回 true,知道您想要使用哪个子类处理字符串。

要删除 isType(String data) 方法中的 OR 列表有点棘手,而且可能有点过度设计,但您可以执行以下操作:

  1. 在类路径中查找可从您的类中分配的类

  2. 然后,当您检索所有可由您自己分配的类时,您必须通过反射调用每个类的 isType 才能知道结果

    我知道您可能会发现自己对第一点有点迷失,最好的方法是查看 ResolverUtil来自 Stripes Framework 的类,他们在方法 loadImplementationsFromContextClassloader

    中执行此操作

关于java - 在类结构中找到正确的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595391/

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