如何通过通用对象访问类的字段变量?

时间:2018-03-05 03:07:40

标签: java oop generics generic-programming data-members

我一直在测试Java中的泛型编程。

以下是我的代码片段:

public class Vehicle<T extends Style> {

    private T make;
    private String color;
    private int year;
    private String brand;
    private String model;

    public Vehicle() {
        this.brand = make.getMake();
    }

    public Vehicle(String c, int yr, String mod) {
        this.brand = make.getMake();
        this.color = c;
        this.year = yr;
        this.model = mod;
    }

    public void printInfo() {
        System.out.println(this.year + " " + this.color + " " + this.brand + " " + this.model);
    }

    public void setColor(String c) {
        this.color = c;
    }
    public void setYear(int yr) {
        this.year = yr;
    }
    public void setModel(String mod) {
        this.model = mod;
    }
}

这是在类型参数中扩展的接口Style

public interface Style {

    public String getMake();
    public boolean usesGas();
    public boolean usesElectricity();

}

此接口由另一个名为Ford的类实现,其中getMake()方法的实现如下:

private String make = "FORD";

public String getMake() {
    return make;
}

在我的驱动程序类Test中,我正在测试所有这些事情:

public class Test{

    public static void main(String[] args){
        Vehicle<Ford> fordFusion = new Vehicle<Ford>();
        fordFusion.setColor("GRAY");
        fordFusion.setModel("FUSION");
        fordFusion.setYear(2015);
        fordFusion.printInfo();
    }
}

现在,根据我的理解,应该能够通过使用接口来访问泛型对象的字段变量和方法,在这种情况下,接口是我的Style接口。编译器在IDE中没有遇到任何问题。该程序应该访问getMake()方法并打印出来:

2015 GRAY FORD FUSION

然而,控制台显示:

Exception in thread "main" java.lang.NullPointerException at Vehicle.<init>(Vehicle.java:32) at Test.main(Driver.java:16)

指向我有this.brand = make.getMake();

的行

那么世界上到底发生了什么?我做错了什么?

编辑:这个被标记为重复的问题并不能解决我的具体情况。虽然这里的错误是NullPointerException,但它与旧问题有很大不同。

Here is a question解决与我相同的问题。如果该问题的解决方案有效,那么我应该能够完成我一直想做的事情。

0 个答案:

没有答案