小编mr.*_*r.b的帖子

铸造一个通用类.(演员)vs Class.cast()

我搜索了我的用例并找到了一些有趣的答案,但它们并不像我需要的那样合适.适当的方法是什么:

@SuppressWarnings("unchecked")
public <T> T newInstance(String name) throws ClassCastException, InstantiationException, IllegalAccessException, ClassNotFoundException {
    return (T) loadClass(name).newInstance();
}
Run Code Online (Sandbox Code Playgroud)

或者有点不同:

public <T> T newInstance(String name, Class<T> c) throws ClassCastException, InstantiationException, IllegalAccessException, ClassNotFoundException {
    return c.cast(loadClass(name).newInstance());
}
Run Code Online (Sandbox Code Playgroud)

我认为这两种方法都是一样的.从我的观点来看,方法1因为参数较少而更好.两个人扔了一个ClassCastException对我来说没问题.确实,@SuppressWarnings("unchecked")注释并不好.

有人能告诉我一种方法对另一种方法有什么好处吗?

编辑:Jon Skeet的回答是正确的.以下代码段可以提供额外的说明.

public class Test {
    public static void main(String[] args) {
        Object o = new Object();
        // Exception at c.cast(o)
        Test.<String>realCast(o, String.class);
    }

    private static <T> T realCast(Object o, Class<T> c) {
        return c.cast(o);
    }
}
Run Code Online (Sandbox Code Playgroud)

无法转换 …

java generics casting

6
推荐指数
1
解决办法
1839
查看次数

标签 统计

casting ×1

generics ×1

java ×1