Java 无法从类型Fisher对非静态方法GetNumThingsCapture()进行静态引用
这是我的第二节课Java 无法从类型Fisher对非静态方法GetNumThingsCapture()进行静态引用,java,types,static,Java,Types,Static,这是我的第二节课 public class Fisher { public static int LIMIT = 10; // max # of fish that can be caught private int numThingsCaught = 0; public int getNumThingsCaught() { return numThingsCaught; } } 我正在使用eclipse,Fisher.GetNumThingsCapture带下划线,当我悬
public class Fisher {
public static int LIMIT = 10; // max # of fish that can be caught
private int numThingsCaught = 0;
public int getNumThingsCaught() { return numThingsCaught; }
}
我正在使用eclipse,Fisher.GetNumThingsCapture带下划线,当我悬停在上面查看错误时,消息说:无法从类型Fisher静态引用非静态方法GetNumThingsCapture如何更改我的代码//鱼!类以使此代码正常工作?您可以将Fisher.getNumThingsCapture更改为f.getNumThingsCapture,因为f是对Fisher对象的引用,也可以将该方法设置为静态,这不是您想要的
所以它看起来像:
public class Fish {
public boolean isDesirableTo(Fisher f) {
if (Fisher.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;
}
}
还有另一个编程技巧。当你直接定义一个静态变量时,考虑把它变成最终的。因为我假设您不想更改限制变量。在这段代码中:Fisher.getNumThingsCatch Fisher是类的名称,而不是对象的引用。由于getNumThingsCapt方法不是静态的,所以需要在对象实例上调用它
解决方案:只需在Fish类中将其更改为f.getNumThingsCapture,您需要对Fisher实例的引用。您可以通过以下方式完成此操作:
if (f.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;
将最后一个修饰符添加到“LIMIT”以确保它不能被覆盖。请向右看。使用f.getNumThingsCapture代替。旁注:通常情况下,如果条件返回true;否则返回false;可以写为返回条件;。在发布本文之前,您是否搜索过关于静态引用和非静态方法的其他问题?可能有一个答案就在那里等着你去发现它!
public class Fish {
Fisher fisher = null;
public boolean isDesirableTo(Fisher f)
{
fisher = new Fisher();
if (fisher.getNumThingsCaught() < Fisher.LIMIT)
{
return true;
}
return false;
}
}
if (f.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;