0

我一直在测试 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();

那么这里到底发生了什么?我究竟做错了什么?

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

这是一个与我的问题相同的问题。如果该问题的解决方案是有效的,那么我应该能够完成我一直在尝试做的事情。

4

0 回答 0