我有一个类,我们称之为它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);
}
}