Java泛型类抛出异常抛出外部

时间:2017-11-15 21:18:23

标签: java generics

当我执行此操作时,我在第9行得到一个ClassCastException。我想知道为什么会发生异常。根据我对泛型的理解,我希望类型推断会导致在try catch中抛出异常。

这是使用1.7编译的。

public class MyClass {
    private static Map<String, Object> map = new HashMap<>();

    public static void main(String args[]) {
        map.put("key", Integer.valueOf(1));
        Float c = method("key");
    }

    public static <T> T method(String k) {
        try {
            return (T) map.get(k);
        } catch (ClassCastException ex) {
            System.out.println(ex);
            return null;
        }
    }
}

有没有办法在方法中抛出异常?我已经看到了下面的用法,但我在通话时无法访问Float.class。

method(Float.class, "key")

public static <T> T method(Class<T> clazz, String k) {
    try {
        return clazz.cast(map.get(k));
...

1 个答案:

答案 0 :(得分:4)

这是因为type erasure

实际上,删除后的代码将显示为:

public static void main(String args[]) {
    map.put("key", Integer.valueOf(1));
    Float c = (Float) method("key");
}

public static Object method(String k) {
    try {
        return map.get(k);
    } catch (ClassCastException ex) {
        System.out.println(ex);
        return null;
    }
}

这就是为什么你在一条你不期望的行中得到例外的原因。

UPD:您似乎必须使用反射来检查返回对象的实际类型。