Java—为非';还没有实例化吗?
所以我正在为另一个类“Calculator”调用的类“Skill”编写代码。Skill类通过调用计算器的方法来影响其当前实例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;
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的“按引用传递”状态不会使其无效吗?相反,支持这一点的是按引用传递。也就是说,保留对原始对象的引用(而不是复制).这是一个很有启发性的消息,我不会很快忘记的。谢谢!