1
我正在爲我自己的目的設計一種語言。它基本上有兩個實體,功能和類型。例如用於設計語言類型系統的正確的類設計
Object1 = CreateObject1("param1", "param2", 23) //Line 1
Object3 = Object1 + Object2 //Line 2
Evaluate(Object3) //Line 3
第2行的計算結果,如果類型的對象Object1是「+」至Object2的,並且如果然後所得對象將被創建並且是將被分配到Object3。變量定義就像Java腳本中的var關鍵字。
我腦海中的設計就像創建一個基本的「價值」類(具有像加,減,乘,除等基本操作)具有具體的孩子,每個孩子對應我計劃用語言攝入的不同類型。
class Value{
Value add(Value value)
..
}
class Integer extends Value{
Value add(Value value){
//if value is compatible to add with Integer type then return the appropriate
//resultant object else throw exception.
}
}
我可以輕鬆地創建孩子類這樣的,但如果一個函數變化的對象的屬性(如一個部件值被改變的類的),然後我需要向下轉換到它於該類型,更新相應的屬性。
class ABC extends Value{
Value add(Value value){
//
}
private int X;
private int Y;
private int Z;
private string XYZ;
public setX(int x){
this.X = x;
}
.
.
}
ObjectABC = GetABC();
SetX(ObjectABC, 1)
在函數SetX()的實現中。我會做這樣的事情:
ABC abc = (ABC)ObjectABC; //ObjectABC will be a Value type here.
abc.setX(1);
我想擺脫這倒下來鑄造的東西。可以做到嗎?請指教。
通常有辦法消除鑄造,但我認爲你需要提供正是你在做什麼的更多信息。例如,誰定義了ABC對象?這是用你的語言定義還是用Java定義的?至少,試着用你的語言展示一個完整的示例程序。 – 2011-04-02 01:24:00