Java泛型方法基础(反射)



我试图正确理解如何使用泛型。我整个早上都在搜索它,但是当教程开始添加多个通用值时,我感到困惑,或者使用非常抽象的术语,我仍然在与之搏斗。

我还在学习,所以任何一般性的建议都是受欢迎的,但我想具体地弄清楚返回泛型类的方法的语法。

例如:

public class GenericsExample4 {
    public static void main(String args[]) {
        Car car;
        Truck truck;
        car = buy(Car.class, 95);
        truck = buy(Truck.class, 45);
    }
    // HELP HERE!
    public static <T extends Vehicle> T buy(Class<T> type, int topSpeed) {
        // create a new dynamic class T . . . I am lost on syntax
        return null; // return the new class T. I am lost on the syntax here :(
    }
}
interface Vehicle {
    public void floorIt();
}
class Car implements Vehicle {
    int topSpeed;
    public Car(int topSpeed) {
        this.topSpeed = topSpeed;
    }
    @Override
    public void floorIt() {
        System.out.println("Vroom! I am going " + topSpeed + " miles per hour");
    }
}
class Truck implements Vehicle {
    int topSpeed;
    public Truck(int topSpeed) {
        this.topSpeed = topSpeed;
    }
    @Override
    public void floorIt() {
        System.out.println("I can only go " + topSpeed + " miles per hour");
    }
}

谁能指出如何将这个泛型方法联系在一起?

不能一般地调用new运算符。你能做的是使用反射,假设你知道构造函数的参数。例如,假设每辆车都有一个构造函数,它的最高速度为int:

public static <T extends Vehicle> T buy(Class<T> type, int topSpeed) {
    try {
        return type.getConstructor(Integer.TYPE).newInstance(topSpeed);
    } catch (Exception e) { // or something more specific
        System.err.println("Can't create an instance");
        System.err.println(e);
        return null;
    }
} 

相关内容

  • 没有找到相关文章

最新更新