小编典典

没有参数的通用方法

java

我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如:

static <T> example<T> getObj() {
    return new example<T>() {

        public T getObject() {
            return null;
        }

    };
}

这是通过以下方式调用的:

example<String> exm = getObj(); // it accepts anything String like in this case or Object and everything

接口example's定义为:

public interface example<T> {

    T getObject();
}

我的问题:example<String> exm是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢?


阅读 220

收藏
2020-11-01

共1个答案

小编典典

编译器TLHS 分配中使用的具体类型推断出类型。

从此链接

如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果类型参数出现在方法的返回类型中,则编译器将查看使用返回值的上下文。如果方法调用显示为分配的右侧操作数,则编译器将尝试从分配的左侧操作数的静态类型推断方法的类型参数。

链接中的示例代码与您所询问的代码相似:

public final class Utilities { 
  ... 
  public static <T> HashSet<T> create(int size) {  
    return new HashSet<T>(size);  
  } 
} 
public final class Test 
  public static void main(String[] args) { 
    HashSet<Integer> hi = Utilities.create(10); // T is inferred from LHS to be `Integer`
  } 
}
2020-11-01