无法将随机枚举值传递给 Java 中的函数

Cannot pass random enum value to function in Java

干杯,我是 java 的新手,我和我 运行 遇到了一个问题 我有三个 classes,都继承了它们之间的东西。开始我有一个 class A:

public class A{
    private int index;

    public A(int index) {
        System.out.println("Creating an instance of A");
        this.index = index;
    }
}

然后我有一个 A 的子类,class M 里面有一个枚举:

public class M extends A{

    public enum Letter {
        A,B,C;
    }
    private Letter letter;

    public M(int index, Letter aLetter) {
        super(index);
        System.out.println("Creating an instance of M");
        this.letter = aLetter;
    }   
}

最后一个 class P , subclass of M:

public class P extends M {
    private T t;

    public enum T{
        o,
        a,
        t
    }

    public P(int index, Letter aLetter, T aT) {
        super(index,aLetter);
        System.out.println("Creating an instance of P");
        this.t = aT;
    }

}

我想做的是创建例如class P 的 3 个对象,并将这些枚举中的每一个的值随机传递给它们。我想在主 class 中创建一个函数,有点像:

Letter getRandLetter() {
    Random rand = new Rand();
    int pick = rand.nextInt(M.Letter.values().length);
    if (pick == 0) {
      return Letter.A;
    } else if (pick == 1) {
      return Letter.B;
    } else {
      return Letter.C;
    }
  }

我的主图是这样的:

int N = 3;
M[] new_m = new M[N]

for(int i = 0; i < N; i++) {

        new_m[i] = new P(i, getRandLetter(), getRandT());
      }

但是我得到这个错误:Cannot make a static reference to the non-static method 。我可以做些什么来实现我想要的?

错误是告诉做什么:

Cannot make a static reference to the non-static method

您的主要方法是静态的,从中调用的方法也应该是静态的。所以你的 getRandLetter()getRandT() 方法应该是静态的。

getRandLetter() 应该是这样的:

static Letter getRandLetter() {
    Random rand = new Rand();
    int pick = rand.nextInt(M.Letter.values().length);
    if (pick == 0) {
      return Letter.A;
    } else if (pick == 1) {
      return Letter.B;
    } else {
      return Letter.C;
    }
  }

并且 getRandT() 也应该是静态的。