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

2022-09-04 06:12:33

具有类层次结构:

String child = null;
Object parent = child;

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


答案 1

您可以使用以下命令指定泛型返回类型:

Sets.<Object>newHashSet(child);

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

public Set<? extends Object> myMethod() {
    return Sets.newHashSet(child);
}

答案 2

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

Sets.<Object>newHashSet(child);

如果未显式传递类型参数,则推断出类型,在这种情况下,它被推断为错误的类型,大概是 。String

看来你正在使用番石榴的套装。方法签名如下所示:

public static <E> HashSet<E> newHashSet()

如您所见,采用类型参数 。结果是 。 被推断为 ,但您已指定要返回的方法。解决方案是帮助编译器或放宽对 的返回类型的限制。newHashSet()EHashSet<E>EStringSet<Object>Set<? extends Object>


推荐