Java—为非';还没有实例化吗?

Java—为非';还没有实例化吗?,java,methods,command,instance,Java,Methods,Command,Instance,所以我正在为另一个类“Calculator”调用的类“Skill”编写代码。Skill类通过调用计算器的方法来影响其当前实例 public class Calculator { int number = 0; ... Skill sk = new Skill(); sk.hitSkill(true); ... public void setNumber(int newValue) { number += newValue;

所以我正在为另一个类“Calculator”调用的类“Skill”编写代码。Skill类通过调用计算器的方法来影响其当前实例

public class Calculator {
    int number = 0;
    ...
    Skill sk = new Skill();
    sk.hitSkill(true);
    ...
    public void setNumber(int newValue) {
        number += newValue;
    }
}
同时,“技能”课程如下所示:

public class Skill { 
    Calculator calc = new Calculator();
    public void hitSkill (boolean someConditions) {
        if (someConditions) {
            calc.setHitNumber(20);
        }
}
上述情况对我没有好处,因为“calc”是一个实例,但不是我希望受到影响的calc实例

我有计算器的getter和setter,这项技能会用到,但它需要一个Calc实例才能工作。准确地说,它需要调用它的计算器实例,而不仅仅是任何计算器实例

为什么我不让计算器方法成为静态的呢?因为它们会影响我需要改变的变量,这些变量不是静态的


有人有什么建议吗?

它看起来像是你作文中的一个循环。你有
技能
取决于
计算器
取决于
技能
。。。你需要解开这个。您可以根据自己对该领域的理解做出此决定

一个显而易见的解决方案是将计算器插入
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;
    }
}
公共课技能{
公共无效命中技能(布尔条件、计算器计算){
如果(某些条件){
计算设定值(20);
}
}
公共类计算器{
整数=0;
...
Skill sk=新技能();

sk.hitSkill(真的,这个);//它看起来像你作文中的一个循环。你有
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;
    }
}
公共课技能{
公共无效命中技能(布尔条件、计算器计算){
如果(某些条件){
计算设定值(20);
}
}
公共类计算器{
整数=0;
...
Skill sk=新技能();

sk.hitSkill(true,this);//不是
新建计算器()
,而是为
Skill
创建一个构造函数,该构造函数使用
计算器
参数

public class Skill {
    private Calculator calc;
    public Skill(Calculator calc) { this.calc = calc; }
}

public class Calculator {
    private Skill sk = new Skill(this);
}

不要使用
new Calculator()
,而是为
Skill
创建一个构造函数,该构造函数使用
Calculator
参数

public class Skill {
    private Calculator calc;
    public Skill(Calculator calc) { this.calc = calc; }
}

public class Calculator {
    private Skill sk = new Skill(this);
}

你甚至需要两个类吗?理想情况下。为了这个问题,我给出了一个相当复杂的应用程序的简化版本。尽管如此,我可以把它全部放在一个类中,但这可能是非常臃肿的设计,我宁愿避免。你甚至需要两个类吗?理想情况下。我给出的一个相当复杂的应用程序的简化版本是f或者是为了这个问题。即使如此,我可以把它全部放在一个类中,但这可能是非常臃肿的设计,我宁愿避免。我想可能就是这样。我现在就试试看,祈祷吧。我想可能就是这样。我现在就试试看,祈祷吧。我想过这个,但是Java的按引用传递状态没有失效吗idate this?相反,支持这一点的是pass-by-reference。也就是说,保留对原始对象的引用(而不是复制)。这是一个很有启发性的小道消息,我不会很快忘记。谢谢!我已经想到了这一点,但Java的“按引用传递”状态不会使其无效吗?相反,支持这一点的是按引用传递。也就是说,保留对原始对象的引用(而不是复制).这是一个很有启发性的消息,我不会很快忘记的。谢谢!