传递类型必要吗?

时间:2015-02-11 20:42:52

标签: java class generics

protected <T> void myMethod(T obj, Class<?> type) 

我已经看过这个方法签名,我不明白为什么第一个参数的类型显式作为参数传递。事实上,我可以从obj.getClass();

获取类型
protected <T> void myMethod(T obj) {
     Class type = obj.getClass();
} 

这只是一个设计选择吗?做第一种方法有什么好处吗?

2 个答案:

答案 0 :(得分:0)

第二个实现实际上是更好的实现。在第一个中,您可能会传递不一致的参数。例如。你可以传递一个A类的对象并传递整数作为第二个参数。因此,您的代码在输入错误时会更容易受到攻击。

答案 1 :(得分:0)

我能想到的一个案例

  • 实例化给定类型T的基本数组,不能从type参数执行此操作,需要实际的类。

实施例

private static <T> void foo() {
    T[] bar = new T[1];  // <== not allowed
}

使用类参数

private static <T> void bar(Class<T> clazz) {
    T[] bar = (T[]) Array.newInstance(clazz, 1);
}