是否需要传递 class 类型?

is passing class type necessary?

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

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

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

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

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

我能想到的一个案例

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

示例

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

有一个class参数

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