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")
                    ) );
            }
4

2 回答 2

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);
于 2013-01-01T08:25:28.960 回答
0

如果您可以使用工厂模式方法来创建类的实例,那就更好了。

请看这个链接

Java 模式

于 2013-01-01T08:18:14.973 回答