Javaで外部プログラム用の新しいスクリプトジェネレータを作成しています。この言語は変数をサポートしますが、型指定されていない言語です。通常、VaRの型がfloatであるJava - 値の型を認識するためのパターン
public class Var
{
private String name;
private String type;
private float defaultValue;
private float lowerBound;
private float upperBound;
private float value;
private LinkedList<Float> valuesConstraint;
private String description;
private Category category;
private LinkedList<CvarDependency> dependencies;
...
}
、それはまた、ブール[0 | 1]することができ、文字列、またはINT:これは私が最初に書かれているコードの例です。 は、だから私はこの実装を行うために終わった:
abstract class Var
{
private String name;
...
}
public class IntVar extends Var
{
private int value;
private int defaultValue;
private int lowerBound; //-infinite
private int upperbound; //+infinite
...
}
public class FloatVar extends Var
{
private float value;
private float defaultValue;
private float lowerBound; //-infinite
private float upperbound; //+infinite
...
}
public class StringVar extends Var
{
private String value;
private String defaultValue; //empty string
...
}
public class BoolVar extends Var
{
private boolean value;
private boolean defaultValue;
private boolean lowerBound; //false <-> 0
private boolean upperbound; //true <-> 1
...
}
今、私がLinkedListのにそれらのVARSを保存する必要がありますが、私は、適切なキャストを管理しますどのようにその内容を読まなければならないとき?
Var var = Manager.getVar("namevar");
if(var.getClass().getName().equals("StringVar"))
...
else if(var.getClass().getName().equals("IntVar"))
...
else if(var.getClass().getName().equals("FloatVar"))
...
else if(var.getClass().getName().equals("BoolVar"))
...
良く、この問題に対処するために、任意のヒント:私は、このアプローチを使用することをお勧めではないことを読んだことがありますか?
「Var」ごとに「訪問者」パターンを提案します。そうすれば、訪問者はキャスティングの仕方を知ることができます。 –
これは私が必要としたパターンです。このコメントを回答として投稿してください。これを返信のスタックの上に置くことができます! – Otacon
instanceOf演算子を使用できますか? – basav