【发布时间】:2017-11-15 21:18:23
【问题描述】:
当我执行此操作时,我在第 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));
...
【问题讨论】:
-
你的意思是你没有访问 Float.class 的权限?您已经将
c定义为 Float 类型。 -
在我的实现中它将是 T c = method("key") 其中 T 确定了许多方法调用。
-
那你为什么不把
Class对象从你实际上期望具体类型的顶部调用中传递出去? -
这是我想避免的。
-
也许您可以将
Class放在顶级调用的本地线程中并在您的method中获取它?