Java - 为尚未实例化的类编写代码?

时间:2017-11-01 00:50:00

标签: java methods command instance

所以我为一个班级编写代码" Skill"这将由另一个类"计算器"调用。 Skill类通过调用其方法来影响Calculator的当前实例。

public class Calculator {
    int number = 0;
    ...
    Skill sk = new Skill();
    sk.hitSkill(true);
    ...
    public void setNumber(int newValue) {
        number += newValue;
    }
}

同时,"技能" class看起来像这样:

public class Skill { 
    Calculator calc = new Calculator();
    public void hitSkill (boolean someConditions) {
        if (someConditions) {
            calc.setHitNumber(20);
        }
}

以上对我没有好处,因为" calc"是一个实例,但不是我希望受到影响的计算实例。

我有Skill会使用的计算器的getter和setter - 但它需要一个Calc实例才能工作。确切地说,它需要调用它的 Calculator实例,而不仅仅是任何Calculator实例。

为什么我不让计算器方法保持静态?因为它们影响我需要能够改变的变量,这些变量不是静态的。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:4)

而不是labels = beauty|beauty-stuff|beauty-salon|beauty-bar ,为new Calculator()创建一个带有Skill参数的构造函数。

Calculator

答案 1 :(得分:1)

它看起来像是你作文中的一个循环。根据{{​​1}},您Skill取决于Calculator ...您需要取消此操作。您可以根据您对域名的理解做出此决定。

一个明显的解决方案是将计算器注入Skill,因此:

Skill::hitSkill()

如果技能总是使用相同的计算器,则可以在构造时注入public class Skill { public void hitSkill (boolean someConditions, Calculator calc) { if (someConditions) { calc.setHitNumber(20); } } public class Calculator { int number = 0; ... Skill sk = new Skill(); sk.hitSkill(true, this); // <== pass in your instance ... public void setNumber(int newValue) { number += newValue; } } (而不是每次调用Calculator)。