1

私はオブジェクトの複数の異なる実装を持っています。これらは、私が作成したこのカスタムinterfaceを実装していますBoard

Board次のようなメソッドが含まれています

public void ConvertFromString(String formattedString);

コンストラクターでBoard呼び出しを実装する各オブジェクト。ConvertFromString()

以下のように見えます。

public void BoardImpl1 implements Board
{
    public Board(string B)
    {
        ConvertFromString(b);
    }

    public void ConvertFromString(String formattedString)
    {
        //do some parsing on string and set up the BoardImpl properties
    }
}

ConvertFromString が public であると警告が発生するため、私が見つけた回避策の 1 つはBoardImplfinal にすることです。これにアプローチするより良い方法はありますか?

4

3 に答える 3

2

// 文字列の解析を行い、BoardImpl プロパティを設定します

メソッドは convertFromString のみを担当する必要があります。

1) メソッドを final にする

public class BoardImpl implements Board{

  public void final convertFromString(String formattedString)
  {
        //do some parsing on string and set up the BoardImpl properties
  }

}

2)解決策はabstract class、スーパークラスコンストラクターで呼び出して、各サブクラスで呼び出す必要がないようにしますが、サブクラスのプロパティを使用しないでください

public abstract class AbstractBoard implements Board{

     public AbstractBoard(String s){
       convertFromString(s);
     }

}

3) そして私の好きな人は構成で何かを作る

public class Client {

 private Board board;

  public Client(String s){
   board.convertFromString(s);
  }

 public void setBoard(Board board){
      this.board = board;
 } 

}

次に、ボードで、どのボードを使用するかを決定する責任をファクトリに委任できます。FlyweightFactory

于 2013-07-15T01:41:13.490 に答える
1

そもそもインターフェイスにConvertFromString本当に属していますか? Boardプロパティを別の方法で初期化したボードがあった場合はどうなるでしょうか? 可能であれば、ボード クラスをリファクタリングすることを検討します。

public class Board {
   public Board(Properties properties) {...}
}

public メソッドを呼び出さずにこれを設定するのに問題ConvertFromStringがあるのは、設計が少しずれているためだと思います。はConvertFromString、その実装について仮定します。

于 2013-07-15T01:24:55.223 に答える
0
  1. コードにコンパイル エラーがあります
  2. 次のコードでコンパイル警告を取得できませんでした

    public interface Board {
    
      public void ConvertFromString(String formattedString);
    
    }
    
    
    public class BoardImpl1 implements Board {
    
      public BoardImpl1(String b) {
    
        ConvertFromString(b);
    
      }
    
      public void ConvertFromString(String formattedString) {
    
        //bla bla
    
      }
    
    }
    
于 2013-07-15T01:45:03.720 に答える