私は 1 つのクラスを持っていClassA
ます。ClassA
、およびその下のすべてのクラスString
は、コンストラクターの引数に at を取ります。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);
}
}