泛型这样写,什么意思呢?

programtic 发布于 2012/11/17 11:16
阅读 1K+
收藏 3
public <T> T selectOne(String statement, Object parameter) {
    // Popular vote was to return null on 0 results and throw exception on too many.
    List<T> list = this.<T>selectList(statement, parameter);
    if (list.size() == 1) {
      return list.get(0);
    } else if (list.size() > 1) {
      throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
    } else {
      return null;
    }
  }
上面中的
this.<T>selectList
很少见这样的写法。
加载中
1
JFinal
JFinal
这样写表示:返回值的类型根据接收该值的变量类型决定,如 Integer value = selectOne(...)返回值类型即为 Integer,又如 String value = selectOne(...)返回值类型即为 String
0
m1llerma
m1llerma
idioms of static generic method
0
业余编程人士
业余编程人士
肯定在别的地方有个T的引用类型
0
南湖船老大
南湖船老大
T 任何类型
programtic
programtic
17
0
eonezhang
eonezhang
你返回结果赋值给啥类型就啥类型
programtic
programtic
不是泛型方法。
eonezhang
eonezhang
是不是泛型传参,selectList是个泛型方法
programtic
programtic
嗯,这个知道。 我的意思是泛型为啥写在this后面。
0
悟方向
悟方向

在静态方法 及非静态方法的调用中 一般会写ClassName.methodName() 或者objectName.methodName()   泛型方法同样适用前面说的这种语法 但如果想加个泛型列表的话 必须写成ClassName.<T>methodName()objectName.<T>methodName()  这是语法上的要求 不这样写 编译器会报错的 

回到mybatis代码中 可以写成 this.selectList (this可以省略,所以可以写成selectList)  这个代码加了泛型 所以要写成 this.<T>selectList 这只是个人的习惯  没其它的

eonezhang
eonezhang
见识了
programtic
programtic
是的,去掉this.<T>也是可以编译通过的。
0
震秦
震秦

JDK java.util.Collections

Map<String, Object> map = Collections.<String, Object>emptyMap();

完全可以的

programtic
programtic
Collections里面的是静态方法。
0
钱离彭
钱离彭
表示任何类型
0
cut
cut
如果认真说,JAVA的泛型其实是山寨C++的模板
返回顶部
顶部