java中的通用容器

时间:2015-12-27 13:06:02

标签: java generics

我正在尝试创建一个通用容器,我可以将其传递给任何数据,稍后通过编译器跟踪类来提取它。

示例:

Container a = new Container(0.3);
a.getValue();// returns 0.3 of type double
Container b = new Container("OMG");
b.getValue();// returns "OMG" of type String

我对如何操作没有任何限制。我在考虑这样的事情。

public class GameSetting {
    Object value;
    Class valueClass;

    public GameSetting(Object value, Class valueClass) {
        this.value = value;
        this.valueClass = valueClass;
    }

    public Class<?> getValue() {
        return (valueClass)value;
    }
    public Class getClass(){return this.valueClass;}
}

但我得到未知类:&#39; valueClass&#39; 错误。

请帮忙

谢谢

2 个答案:

答案 0 :(得分:3)

您需要查看Java Generics。您的基本容器类看起来像这样......

public class Container<T> {
    private final T value;

    public Container(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

然后你就像这样使用它......

Container<Double> a = new Container<>(0.3);
a.getValue();// returns 0.3 of type double
Container<String> b = new Container<>("OMG");
b.getValue();

使用泛型要注意的一件事是它们不能直接使用Java原始类型 - 因此,如果您要将它们与intdouble一起使用,则需要了解Java的{ {3}}功能。

答案 1 :(得分:0)

public Class<?> getValue() {
        return (Class) (value);
    }

您正尝试使用引用而不是Class来键入强制转换。你也不应该覆盖最后的方法getClass()。