2014-05-22 132 views
0

讓我們考慮這個Java類:Java OOP:如何設計屬性值決定另一個屬性類的情況?

public class A { 

    int att1; 
    UnknownDataType att2; 

} 

而且讓我們考慮這些影響:

  • IF ATT1等於1 THEN ATT2應該是類型DataType1的。

  • IF ATT1等於2 THEN ATT2應該是類型DataType2的。

我真的不能想象如何設計這個,因爲一個屬性值正在影響另一個屬性類。

應該簡單地把課一個爲抽象類,並DataType1DataType2一個繼承?你們有沒有類似的情況?

非常感謝。

回答

2

這不是一個好設計。你想用仿製藥......

public class A<UnknownDataType> { 

    UnknownDataType type; 

} 


A<String> aString = new A<String>(); 
A<Integer> aInteger = new A<Integer>(); 
+0

這是真的,但考慮到你的泛型,你需要一些能夠評估att1的值來初始化你的對象的東西。這應該被指定。 –

1

我通常使用的3種方法在這裏之一:

  1. Quick'n'dirty:如果ATT2不直接暴露則只是其類型設置爲對象和必要時使用att1進行投射。
  2. 如果類似的方式使用類型 - 有空間來創建一個通用接口。在這種情況下,這變得很簡單,並且只有在需要一些不重要的參與時才允許使用att1。
  3. 泛型或子類。這解決了att2類型,但不限制你。如果att2的類型可以在對象的生命週期中改變,那麼不容易(儘管你也實現了變體2)
0

這對於瞭解軟件的確切目標有點困難。可以有幾種方法來解決這個問題。讓我們列舉一些潛在的場景

您需要存儲的UnknownDataType之間有什麼共同之處嗎?也許這個數據類型應該是一個接口,並且你存儲接口而不是數據類型。

在對數據執行操作的方式之間有什麼共同之處嗎?例如,如果在計算中使用UnknownDataType,則可能希望將其替換爲命令界面,並存儲命令以對該數據執行操作。 Wiki Link

如果需要兩種不同的數據類型,那麼該對象可能不相關?也許你對工廠感興趣,根據att1生成你的類,而A類實際上只是一個接口或抽象類。

也許你事先知道的價值和所有你想要做的是使用泛型參數初始化類

public class a<T> 

如果這些不匹配您的情況隨時來形容它多一點爲最佳實踐。

相關問題