我正在爲Java中的外部程序製作一個新的腳本生成器。這種語言支持變量,但它是一種無類型的語言。這是我最初寫的代碼的一個例子: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;
...
}
通常VAR類型是浮點型,但它可以是還一個bool [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,但是當我要讀的內容我怎麼管理的正確鑄造?我讀過使用這種方法不是一個好習慣:
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'建議一個'Visitor'模式。這樣,訪問者就知道如何進行鑄造。 – 2012-02-14 11:54:48
好吧,這是我需要的模式。請發表評論作爲答案,這樣我可以把它放在堆棧的回覆中! – Otacon 2012-02-14 12:03:34
你可以使用instanceOf運算符嗎? – basav 2012-02-14 12:05:49