自从我使用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);
答案 0 :(得分:1)
正确?嗯,工作吗?然后它可能正确。
是否是体面的方式,然后答案是“也许”。很难说这个代码在什么上下文中。但是有些事情你可以记住:
Stat
?您是否觉得该类的责任是这样做的,并且知道从中获取它们的数据库值是什么?如果没有,请考虑建立一个这样做的类。thisCharacter.hp.setCurrent(...)
等受链接的来电违反了principle of least knowledge。有时你无法帮助它,但通常它会导致kludgy代码。考虑使用能够处理统计数据周围所有逻辑的东西。在您的代码中,您可能需要HealthStatsHandler
loadStats()
,其中包含saveStats()
,takeDamage(int dmg)
等方法以及revive(int health)
和{{1}}等更改操作。答案 1 :(得分:0)
这不是一棵树。两个人不可能有一层以上的孩子。
通常您定义一个界面,让我们称之为Node
,其中Stat
和Character
都会实现它,而Character
的两个孩子的类型为Node
答案 2 :(得分: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
另一个简单的步骤是创建一个Character
构造函数,该构造函数将采用hp
和mp