/**
 * 按HQL查询唯一对象.
 * 
 * @param values 命名参数,按名称绑定.
 */
public <X> X findUnique(final String hql, final Map<String, ?> values) {
return (X) createQuery(hql, values).uniqueResult();
}
解释下这个X是怎么用的。哪儿定义过的呢?

解决方案 »

  1.   

    泛型。
    1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 
      2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 
      3、泛型的类型参数可以有多个。 
      4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。 
      5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");