作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Hibernate validator 并尝试创建一个小实用程序类:
public class DataRecordValidator<T> {
public void validate(Class<T> clazz, T validateMe) {
ClassValidator<T> validator = new ClassValidator<T>(clazz);
InvalidValue[] errors = validator.getInvalidValues(validateMe);
[...]
}
}
问题是,为什么我需要提供 Class<T> clazz
执行时的参数 new ClassValidator<T>(clazz)
?为什么不能指定:
T
如 ClassValidator<T>(T)
? validateMe.getClass()
如 ClassValidator<T>(validateMe.getClass())
当我尝试执行这两个选项时出现错误。
编辑:我明白为什么 #1 不起作用。但我不明白为什么#2 不起作用。我目前在 #2 中遇到此错误:
cannot find symbol
symbol : constructor ClassValidator(java.lang.Class<capture#279 of ? extends java.lang.Object>)
location: class org.hibernate.validator.ClassValidator<T>
注意:Hibernate API 方法是 ( here )
最佳答案
因为 T
不是一个值——它只是给编译器的一个提示。 JVM 不知道 T
。您只能将泛型用作一种类型,以便在编译时进行类型检查。
关于Java 泛型问题 - Class<T> 与 T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074788/
我是一名优秀的程序员,十分优秀!