如何从getter返回的对象中访问变量

时间:2013-08-02 18:11:23

标签: java variables getter getter-setter law-of-demeter

我有一个 Quad 类(对于我的精灵),在这个类中有各种变量用于改变所述Quad的状态。所以我可以简单地制作一个精灵:

Quad hero = new Quad();

我有一个资源类,其中保存/创建了所有精灵。

我有一个 Main 是一个相邻的资源类,因此为了避免破坏Demeter的规则,我创建了各种getter / setter 资源类( Main 的邻居)。

但是,由于我需要访问许多变量,是否有更好的方法为每个变量创建一个getter / setter?

我想做一些事情,比如能够写一个简单地返回Quad的getter,然后我可以在 Main 类中访问它的变量。所以在资源中,我会有类似的东西:

public Quad getQuad(Quad quad){

    return quad;

}

然后在我的 Main 课程中,我希望这样:('res'是我的Resouce类的对象)

res.getQuad(hero).variable;

我意识到上述情况不起作用 - 这只是我想要实现的一个例子。

也许我可以在getter中放入一些代码,这些代码可以让我访问任何变量而不是特定的变量。

这就是我不必通过这样做来打破Demeter,我已经多次确信良好做法:

res.hero.variable;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你的例子是正确的,如果"变量"是Quad的可访问字段。

res.getQuad(hero).variable;

或者您可以将Quad分配给局部变量并稍后访问变量

Quad q = res.getQuad(hero);

/* do something with */ q.variable1;

您可以在参考资料中拥有HashMap<String, Quad>,这样您就可以使用创建它时使用的某个键来获取四边形。如果您有很多这样的四边形,那么比为所有四边形写入吸气剂更容易。

答案 1 :(得分:1)

如果事情不是静态的,您可能会对此遵循Singleton Design模式感兴趣。

但是,如果在项目中经常使用资源 - 但是包含静态成员(或者你应该返回并使其成为静态的成员) - 那么为所有内容制作getter和setter是相当愚蠢的。只需将它们设为公共对象并像常量一样访问它们。

现在,如果你想做你上面描述的(这是一个非常好的方法) - 它当然是可能的。您需要在资源类中保留一个字典,该字典使用某种键来访问成员。可能你会想要设置一个枚举,每个成员的名字都分配给一个索引。并使用枚举作为词典的关键。这样你就可以这样访问它:

res.getQuad(Resource.MyEnum.Resource1).variable;

资源将需要类似的东西:

public Dictionary<MyEnum, Quad> my_quads = new Dictionary<MyEnum, Quad>();

public static enum MyEnum
{
    Resource1 = 0
    Resource2 = 1
    Resource3 = 2
}

public Quad getQuad(MyEnum resource_index)
{
    return my_quads[resource_index];
}