是否需要传递 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);
}
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);
}