我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如:
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定义为:
example's
public interface example<T> { T getObject(); }
我的问题:example<String> exm是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢?
example<String> exm
编译器T从 LHS 分配中使用的具体类型推断出类型。
T
从此链接:
如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果类型参数出现在方法的返回类型中,则编译器将查看使用返回值的上下文。如果方法调用显示为分配的右侧操作数,则编译器将尝试从分配的左侧操作数的静态类型推断方法的类型参数。
链接中的示例代码与您所询问的代码相似:
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` } }