2013-01-01 110 views
1

我是Java新手,所以這可能很容易。我有一系列使用接口共享大多數變量/方法的子類,但是每個子類都有一些其類型是唯一的,這就是爲什麼我這樣設計代碼的原因。但是,當我從數據庫中檢索數據(數據以每個子類的相同格式存儲)時,我希望能夠創建一個基類的實例,或者我可以輕鬆地創建一個基類的實例轉換爲我需要的子類或者有某種工廠給我一個子類實例。使用共享接口/基類實例化子類的更好方法

這是我現在的代碼,它只是檢查數據的類型,然後創建一個新的子類實例,但它感覺對我來說很重複。

還好嗎?

   if(rs.getString("action_type").equals("block-break") || rs.getString("action_type").equals("block-place")){ 
       actions.add(new BlockAction(
         rs.getString("action_time"), 
         rs.getString("action_type"), 
         rs.getString("world"), 
         rs.getString("player"), 
         rs.getInt("x"), 
         rs.getInt("y"), 
         rs.getInt("z"), 
         rs.getString("data") 
        )); 
      } 

      if(rs.getString("action_type").equals("entity-kill")){ 
       actions.add(new EntityKillAction(
         rs.getString("action_time"), 
         rs.getString("action_type"), 
         rs.getString("world"), 
         rs.getString("player"), 
         rs.getInt("x"), 
         rs.getInt("y"), 
         rs.getInt("z"), 
         rs.getString("data") 
        )); 
      } 
+0

您正在創建的對象是否具有多個構造函數?他們是否有一個默認(空)構造函數以及如你所示的那樣需要8個參數的構造函數? –

+0

它們在每個子類中都有兩個不同的構造函數。沒有空的默認值。 – helion3

+0

多個構造函數在每個類中是否相同? –

回答

3

我不知道什麼是你的問題actions但這裏是你能避免重複,並得到簡單的代碼的方式。

BaseAction baseAction ; // super class 
String actionType = rs.getString("action_type"); 
if (actionType.equals("block-break") || actionType.equals("block-place")) { 
    BlockAction blockAction = new BlockAction(); // create instance for sub class 
    blockAction.set() // set sub class attributes here 
    baseAction = blockAction ; 

} else if (actionType.equals("entity-kill")) { 
    EntityKillAction entityKillAction =new EntityKillAction(); //another subClass 
    entityKillAction.set() 
    baseAction = entityKillAction; 
} 
//set all super class atributes for all 
baseAction.setActionTime(rs.getString("action_time")); 
baseAction.setActionType(rs.getString("action_type")) ; 
// similarly set for all attributes 
actions.add(baseAction); 
0

更好的是,如果您可以使用工廠模式方法來創建類的實例。

請有看看這個鏈接

Java Patterns

相關問題