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;