繁体   English   中英

不能从静态上下文引用非静态方法

[英]Non-static method cannot be referenced from a static context

您好,我目前遇到“ Domino.java:32:错误:无法从静态上下文引用非静态方法getValue()”的常见错误。我有点理解这是一个问题,因为它只是该实例的一个实例。 getValue方法。 在这个compareTo方法中,我试图传递一些多米诺骨牌并将其与设置的多米诺骨牌进行比较,并根据一些比较返回-1,0,1。 我需要多米诺骨牌两边的总和来比较它们,这就是为什么我尝试获取domino.getValue()的原因,在这一点上,我只是不确定如何实现此目的。 任何建议或帮助将不胜感激

public class Domino {
    public static int side1;
    public static int side2;

       public Domino(int aside, int bside){
           side1 = aside;
           side2 = bside ;
       }
       public Domino() {
           side1 = 4;
           side2 = 5;
       }

       public boolean isDouble(){
           if(side1 == side2) {
               return true;
           }
           else {
               return false;
           }
       }
       public int getValue(){
          return side1 + side2;
       }
       public int compareTo(Domino someDomino)
         {
            int count = 0;
            if(Domino.getValue() < someDomino.getValue()){
               count = -1; 
             }if(Domino.getValue() > someDomino.getValue()){
                   count = 1; 
                 }
             if(Domino.getValue() == someDomino.getValue()){
                   count = -0; 
                 }
           return count;  
         }

       public static void main(String args[]) {

       }

}

这是因为您是在compareTo方法旁边在Domino类上静态调用方法的。 摆脱Domino. 调用getValue()的一部分。

public int compareTo(Domino someDomino)
         {
            int count = 0;
            if(getValue() < someDomino.getValue()){
               count = -1; 
             }if(getValue() > someDomino.getValue()){
                   count = 1; 
                 }
             if(getValue() == someDomino.getValue()){
                   count = -0; 
                 }
           return count;  
         }

Domino是类本身,则需要比较的参数与当前实例的对象( 显式参数 )( 隐含参数 )上,您正在调用方法之一,它是this

public int compareTo(Domino someDomino){
    int count = 0;
    if(this.getValue() < someDomino.getValue()){
        count = -1; 
    }else if(this.getValue() > someDomino.getValue()){
        count = 1; 
    }
    return count;  
}

这是一样的:

public int compareTo(Domino someDomino) {
    return Integer.compare(this.getValue(), someDomino.getValue());
}

另外:

  • else if您的测试不能同时为真, else if使用else if
  • 不需要最后检查是否equality ,如果不是<和not >那么它是==并且count将已经equals 0
  • 重要 public static int side1; => public int side1; 如果它们是静态的,则对于每个 Domino都是相同的

最好添加Comparable接口,以允许对ex列表中的Domino进行排序,方法compareTo()将自动使用

public class Domino implements Comparable<Domino>{...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM