2013-01-01 68 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

相关问题