如何强制使用静态泛型方法的返回类型?

Fra*_*ani 12 java generics java-7

有一个类层次结构:

String child = null;
Object parent = child;
Run Code Online (Sandbox Code Playgroud)

如何强制Sets.newHashSet(E...)返回Set<Object>传递String参数?

Dmi*_*urg 18

您可以指定泛型返回类型:

Sets.<Object>newHashSet(child);
Run Code Online (Sandbox Code Playgroud)

也许你可以返回Set<? extends Object>,然后你可以把它写成一个返回类型:

public Set<? extends Object> myMethod() {
    return Sets.newHashSet(child);
}
Run Code Online (Sandbox Code Playgroud)


Rey*_*les 7

您将类型参数显式传递给newHashSet:

Sets.<Object>newHashSet(child);
Run Code Online (Sandbox Code Playgroud)

如果未明确传递type参数,则推断出类型,在这种情况下,推测它是错误的类型String.

看来你正在使用Guava的套装.方法签名如下:

public static <E> HashSet<E> newHashSet()
Run Code Online (Sandbox Code Playgroud)

如您所见,newHashSet()需要一个类型参数E.结果是HashSet<E>.E被推断为String,但您已指定要返回的方法Set<Object>.解决方案是帮助编译器或放宽返回类型中的限制Set<? extends Object>.