protected <T> void myMethod(T obj, Class<?> type)
我已经看过这个方法签名,我不明白为什么第一个参数的类型显式作为参数传递。事实上,我可以从obj.getClass()
;
protected <T> void myMethod(T obj) {
Class type = obj.getClass();
}
这只是一个设计选择吗?做第一种方法有什么好处吗?
答案 0 :(得分:0)
第二个实现实际上是更好的实现。在第一个中,您可能会传递不一致的参数。例如。你可以传递一个A类的对象并传递整数作为第二个参数。因此,您的代码在输入错误时会更容易受到攻击。
答案 1 :(得分:0)
我能想到的一个案例
实施例
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);
}