java初学者一枚,学习别人的代码遇到类似如下的泛型方法定义:
public static <T> boolean check(String a, int b, String c) {
T t = null;
                 t = (T)fun(a,b,c);
                 return t != null;
}
调用的时候直接通过类名来调用,即  boolean f = a.check(a,b,c);
求问函数里的T是如何确定的?

解决方案 »

  1.   

    没太明白你的意思,  fun函数返回的值可以转T   这个应该看fun有没有返回值,  如果fun没有返回值   为空  这里cheak函数返回的就是false  否则 true
      

  2.   

    这种代码除非fun的返回值也是参数类型或者返回Object,否则不能通过编译。
    从代码上看,这个方法不应该写成泛型方法,因为非空校验不需要知道类型,唯一的区别在于可能抛出转型异常。
    静态泛型方法的调用,可以手动指定参数类型,避免混淆:boolean f = a.<String>check(a,b,c);
      

  3.   

    类变量<T> 是在你调用这个方法的时候提供
    但是你这个方法根本不需要如此定义,直接返回 fun(a,b,c) != null 即可
      

  4.   

       我也是新手  t = (T)fun(a,b,c);  若fun 的返回值不是参数类型或者Object,那就编译出错了吧, 非空校验其实可以写成
    return fun(a,b,b)!=null ;