java - 泛型 java 类中的反射

标签 java generics reflection

我有以下类(class)(这只是一个简化的例子):

public abstract class Material {
    public abstract String name();
    /* ... */
}

public class Wood extends Material {
    @Override
    public String name() {
        return "<WOOD>";
    }
    /* ... */
}

public class Metal extends Material {
    @Override
    public String name() {
        return "{Metal}";
    }
    /* ... */
}

public class Car<T extends Material> {
    public void printName() {
        System.out.println(T.name()); // Here is the problem!
    }
    /* ... */
}

public class Main {
    public static void main(String[] args) {
        Car<Wood> myCar1 = new Car<Wood>();
        Car<Metal> myCar2 = new Car<Metal>();
        myCar1.printName();
        myCar1.printName();
    }
}

问题在代码中指出。

最佳答案

这可能是我实现它的方式。对于你的情况是否令人满意,我不知道。

enum Material {

    WOOD("<WOOD>"),
    METAL("{Metal}");

    String name;
    private Material(String name) {
        this.name = name;
    }
    public String toString() {
        return name;
    }
}

class Car {
    Material material;
    public Car(Material material) {
        this.material = material;
    }
    public void printName() {
        System.out.println(material);
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar1 = new Car(Material.WOOD);
        Car myCar2 = new Car(Material.METAL);
        myCar1.printName();
        myCar2.printName();
    }
}

关于java - 泛型 java 类中的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214500/

相关文章:

java - 从build.gradle从Java类访问变量

java - 使用编程在android上设置触摸输入

java - java中如何读取json文件?

java - 这个深奥的泛型错误是编译器错误还是新限制? (推断类型不符合上限)

c# - 在 C# 中的 nestedProperty 上使用 InvokeMember

c# - 将整数转换为仅在运行时已知的盒装枚举类型

java - spring @Preauthorize 中的自定义方法

java - 对 Java 中的泛型感到困惑

java - 创建泛型类以传递泛型类型(对象或列表)

c# - 无法调用反射 DLL 中的方法。我怎样才能得到更好的错误信息?