0

我希望我的程序从另一个类输入一个私有变量。

我想使用 mutator 和 accessor。

它不断出错 NullPointerException。我的代码有什么问题?

public abstract class Inputs {
private String val;
private String typ;
public abstract void setVal(String val);
public abstract void setTyp(String typ);
public abstract String getVal();
public abstract String getTyp();
}

public DeckOfCards extends Inputs{
String val;
String typ;
static DeckOfCards kerds = new DeckOfCards();
    public void setVal(String val){
        this.val = val;
    }

    public void setTyp(String typ){
        this.typ = typ;
    }

    public String getVal(){
        return this.val;
    }

    public String getTyp(){
        return this.typ;
    }
    public static void main(String args[]){
       System.out.print("Value: ");
       kerds.setVal(kerds.val);
       if(kerds.val.equals("A"){
          System.out.print("Type: ");
          kerds.setTyp(kerds.typ);
       }
    }
}
4

2 回答 2

1

这是您的问题kerds.setVal(kerds.val); kerds在主运行时尚未创建。

  • 您需要在使用前初始化 DeckOfCards 的实例。
  • 仅在设置值后尝试检索值。否则,尝试检索尚未设置的值将引发 NullPointerException(正如 Rehman 指出的那样)

下面是一个正确使用的例子:

     public static void main(String args[]){
        DeckOfCards kerds = new DeckOfCards();
        kerds.setVal("A");
        kerds.setTyp("TYPE_A");

        System.out.println("Displaying values of kerds");
        System.out.println("kerds value : " + kerds.getVal());
        System.out.println("kerds type : " + kerds.getTyp());
        }
于 2015-10-02T08:24:43.787 回答
0

kerds.setVal(kerds.val)正在设置一个空值。此时 kerds.val 的值尚未设置。基本上你的代码没有任何意义。您正在设置一个尚未设置的具有相同属性值的属性。

于 2015-10-02T08:33:50.977 回答