![](/img/trans.png)
[英]Ambiguous method call in Intellij with Spring Data JPA interface
[英]JPA ambiguous method call isMember
CriteriaBuilder有重载方法isMember(...)
创建一个谓词,用于测试元素是否是集合的成员。
<E,C extends java.util.Collection<E>>
Predicate isMember(E elem, Expression<C> collection)
<E,C extends java.util.Collection<E>>
Predicate isMember(Expression<E> elem, Expression<C> collection)
我为以下调用得到了模糊的编译错误:
CriteriaBuilder.isMember((Expression<Object>)a, (Expression<Collection<Object>>)b);
成员类型可以是任何类型,因此它是对象类型。 怎么解决? 谢谢。
您可以声明一个(未经检查的)泛型类型来链接转换,也许在内部私有方法中,以避免其他调用者可见。 这甚至编译:
CriteriaBuilder cb;
Object a;
Object b;
@SuppressWarnings("unchecked")
private <E> void isMember() {
cb.isMember((Expression<E>) a, (Expression<? extends Collection<E>>) b);
}
虽然a
和b
会更好地作为类型Expression
,和/或作为本地变量或参数的更多本地作用域的方法。
编译器的问题是(Expression<Object>)a
也可能是实际的Type E
,它只是Object
。 为了让Method运行,你必须避免强制转换。
您可以在此输入链接描述中找到一个很好的示例,说明此错误发生的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.