0

私がJavaを使用してからしばらく経ちましたが、これが適切な、あるいは正しい設定方法であるかどうか疑問に思っていました。

参考までに、userResultsは、以下のコードに存在しないJDBI変数を参照します。

より良い方法を提案してください、ありがとう。

public class Stat
{
private int current;
private int max;

public int getCurrent()  {return current;}
public void setCurrent(int current)   {this.current = current;}

public int getMax()  {return max;}
public void setMax(int max)   {this.max = max;}
}


public class Character
{
Stat hp = new Stat();
Stat mp = new Stat();
}

Character thisCharacter = new Character();

// Set the value of current & max HP according to db data.
thisCharacter.hp.setCurrent((Integer) userResults.get("hpColumn1"));
thisCharacter.hp.setMax((Integer) userResults.get("hpColumn2"));

// Print test values
System.out.println (thisCharacter.hp.Current);
System.out.println (thisCharacter.hp.Max);
4

3 に答える 3

1

正しい?まあ、それは動作しますか?その後、それはおそらく正しいです。

それがまともな方法であるかどうかにかかわらず、答えは「たぶん」です。このコードがどのコンテキストにあるかを判断するのは困難です。ただし、覚えておくことができることがいくつかあります。

  • どのクラス(またはオブジェクト)にStat設定されていますか?これを実行し、それらを取得するデータベース値を知るのはクラスの責任だと思いますか?そうでない場合は、これを行うクラスを作成することを検討してください。
  • のような連鎖呼び出しを行うことは、知識が最も少ないという原則のthisCharacter.hp.setCurrent(...)違反です。時々あなたはそれを助けることができません、しかし通常それは厄介なコードにつながります。統計を取り巻くすべてのロジックを処理するものを用意することを検討してください。コードでは、、などのメソッドと、およびなどのミューテイタアクションを持つが必要になる場合があります。HealthStatsHandlerloadStats()saveStats()takeDamage(int dmg)revive(int health)
  • オブジェクトデザインが正しいかどうかわからない場合は、SOLIDの原則を調べてください。これらは、拡張可能で「クリーン」なコードが必要な場合に開発者が従うべき優れたガイドラインを提供します。
于 2012-04-25T07:21:45.123 に答える
0

これは実際には木ではありません。2つに複数の子の層があることはできません。

通常、インターフェイスを定義します。インターフェイスを呼び出してNode、両方StatCharacter実装し、の2つの子CharacterのタイプはNode。です。

于 2012-04-25T07:15:29.493 に答える
0

Statオブジェクトを個別に作成し、それらをCharacterに渡し、次のように文字属性をプライベートにすることを検討します。

public class Character
{
  private Stat hp;
  private Stat mp;

  public Stat getHp()         {return hp;}
  public void setHp(Stat h)   {this.hp = h;}

  public Stat getMp()         {return mp;}
  public void setMp(Stat m)   {this.mp = m;}
}

// Set the value of current & max HP according to db data.
Stat hp = new Stat();
hp.setCurrent((Integer) userResults.get("hpColumn1"));
hp.setMax((Integer) userResults.get("hpColumn2"));

Character thisCharacter = new Character();
thisCharacter.setHp(hp);
// do the same for mp

追加の簡単な手順の1つは、とCharacterをとるコンストラクターを作成することです。hpmp

于 2012-04-25T07:22:19.123 に答える