无法从静态上下文引用非静态方法

时间:2017-09-28 19:49:44

标签: java error-handling

你好,我目前得到的常见错误是 " 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[]) {

       }

}

2 个答案:

答案 0 :(得分:1)

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

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;  
         }

答案 1 :(得分:1)

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,因为您的测试不能同时为真
  • 最后无需检查equality,如果它不是<而不是>,那么它是==并且计数已经是equals0
  • 重要 public static int side1; =&gt; public int side1;如果它们是静态的,则对于 EACH Domino
  • 将是相同的

添加Comparable接口是一个好习惯,允许在列表中对Dominos进行排序,方法compareTo()将自动使用

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