繁体   English   中英

JPA模糊方法调用是成员

[英]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);
}

虽然ab会更好地作为类型Expression ,和/或作为本地变量或参数的更多本地作用域的方法。

编译器的问题是(Expression<Object>)a也可能是实际的Type E ,它只是Object 为了让Method运行,你必须避免强制转换。

您可以在此输入链接描述中找到一个很好的示例,说明此错误发生的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM