Intellij idea Kotlin/IntelliJ-编译器找不到正确的函数参数类型
我正在使用IntelliJ用Kotlin语言(JetBrains)编写代码,我在编译器上遇到一个错误,编译器找不到函数的正确参数类型,总是说函数接收Intellij idea Kotlin/IntelliJ-编译器找不到正确的函数参数类型,intellij-idea,kotlin,Intellij Idea,Kotlin,我正在使用IntelliJ用Kotlin语言(JetBrains)编写代码,我在编译器上遇到一个错误,编译器找不到函数的正确参数类型,总是说函数接收Nothing参数 有人知道问题出在哪里吗 在图中,控制台显示编译器错误,但屏幕中央的帮助显示IntelliJ可以找到函数的正确参数类型,但编译器不能 ===已编辑========================================== Java代码是: @Transactional public int deletar(Bus
Nothing
参数
有人知道问题出在哪里吗
在图中,控制台显示编译器错误,但屏幕中央的帮助显示IntelliJ可以找到函数的正确参数类型,但编译器不能
===已编辑==========================================
Java代码是:
@Transactional
public int deletar(BuscaInfo info) {
// ---- Criando a busca ao banco:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaDelete query = cb.createCriteriaDelete( info.classe );
Root root = query.from( info.classe );
// Cláusula WHERE do banco:
Predicate[] preds = WhereBuilder.build(cb, root, info.where);
if (preds.length < 1) {
throw new MsgException(JsonResponse.ERROR_EXCECAO,null,"Os parâmetros de filtragem da QueryString não são válidos.");
}
query.where(preds);
// A busca ao banco:
int qtd = em.createQuery(query).executeUpdate();
return qtd;
}
@Transactional
公共int deletar(BuscaInfo信息){
//----Criando a busca ao banco:
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaDelete query=cb.createCriteriaDelete(info.classe);
Root=query.from(info.classe);
//Cláusula banco在哪里:
谓词[]preds=WhereBuilder.build(cb、root、info.where);
如果(预测长度<1){
抛出新的MSGExpRead(JSOReal.Error)Excel,NULL,“OSPAR,Mealthes de FieldEm DQQueSrand N n o o s s VaaLiDOS);
}
查询。何处(preds);
//布斯卡奥班科银行:
int qtd=em.createQuery(query.executeUpdate();
返回qtd;
}
而info.classe
属于Class
类型
使用Hibernate 5.x和JPA 2.1 api进行编译。该代码在WildFly 9.x和10.x上运行。您能检查
q
变量的类型吗?(导航到它,运行alt+q)
我假设它的类型是CriteriaDelete
,而这些from
方法中的都不能被调用,原因与它们在Java中不能对CriteriaDelete
类型的变量调用的原因相同:我们不能确切地说创建实例时t
是什么
当然,诊断在这里可能更好。我已经在上面创建了,谢谢您的回复。是的,q
变量是CriteriaDelete
,但这段代码是对我的Java代码的重写,在Java中我称之为。来自CriteriaDelete
和CriteriaUpdate
的(Class)
方法(不是关于,但我对CriteriaUpdate
有同样的问题)。如果我不调用这个方法,就会抛出一个exeception,表示需要指定root。多亏了open-an-issue=DIt,这很奇怪,它在Java中工作。你能分享一下相关的Java版本吗?编辑了这个问题,添加了一段用Java编写的代码。谢谢你的帮助。Java代码中有一个棘手的时刻:你使用原始类型CriteriaDelete查询
,当从
调用时,它会有效地关闭精确的类型匹配。如果使用CriteriaDelete
type,则会出现类似错误。在Kotlin中没有原始类型,但您始终可以使用不安全的强制转换,如(q作为CriteriaDelete)。从(info.classe作为Class)
,这将是Java代码的公平Kotlin版本