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

I don't know what is actions in your question but here is a way you can avoid repetitive and get simpler code.

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 に答える