Java泛型问题-类<;T>;对T?

Java泛型问题-类<;T>;对T?,java,generics,hibernate-validator,Java,Generics,Hibernate Validator,我正在使用Hibernate validator并尝试创建一个小的util类: public class DataRecordValidator<T> { public void validate(Class<T> clazz, T validateMe) { ClassValidator<T> validator = new ClassValidator<T>(clazz); InvalidValue[]

我正在使用Hibernate validator并尝试创建一个小的util类:

public class DataRecordValidator<T> {
    public void validate(Class<T> clazz, T validateMe) {
        ClassValidator<T> validator = new ClassValidator<T>(clazz);
        InvalidValue[] errors = validator.getInvalidValues(validateMe);
        [...]
    }
}
注意:HibernateAPI方法是()

,因为它需要一个类对象作为其参数,而不是所讨论的类的实例。请记住,您可以使用此代码执行您试图执行的操作:

ClassValidator<? extends T> validator = new ClassValidator<? extends T>(validateMe.getClass());

ClassValidator因为
T
不是一个值-它只是给编译器的一个提示。JVM没有
T
的线索。为了在编译时进行类型检查,您只能将泛型用作类型。

如果
validate
方法是您的,那么您可以安全地跳过

public void validate(T validateMe) {
    ClassValidator<T> validator = 
           new ClassValidator<T>((Class<T>) validateMe.getClass());
    ...
}

如果您认为需要这样做,请在方法中包含
Class
参数。否则,您可能会在运行时得到
ClassCastException
,但这很容易调试,尽管这不是泛型背后的想法。

谢谢。为什么不能使用
validateMe.getClass()
t.class
?我也这么认为。。。但是我得到了这个错误:
找不到symbol
/
symbol:constructor ClassValidator(java.lang.Class)
/
位置:Class org.hibernate.validator.ClassValidator
否:
找到:?扩展T/required:class或interface With bounds
符号:方法getInvalidValues(T)位置:class org.hibernate.validator.ClassValidator
谢谢。那么为什么不能使用
validateMe.getClass()
?可以在任何对象引用上使用
getClass()
。。。刚刚检查过,编译器对此没有问题。您可以使用
validateMe.getClass()
,但有一点需要注意:如果
validateMe
null
,您会得到一个
NullPointerException
,它可能是您想要的,也可能不是您想要的。使用当前代码,您可以传递基类(例如,使用其基类的规则验证此
Employee
实例
Person
)。如果您省略了不再可能的
参数。谢谢,
(类)
是关键!
public void validate(T validateMe) {
    ClassValidator<T> validator = 
           new ClassValidator<T>((Class<T>) validateMe.getClass());
    ...
}
class A {..}
class B extends A {..}

new DataRecordValidator<A>.validate(new B());