在这里我发现了许多类似的问题,但没有一个解决方案对我没有帮助,因为我的问题的细节。我有下面的类层次结构:
第一个月
public interface ParentInterface {
void setMessages(Collection<String> var1);
}
字符串com.package.ParentClass.java
个
public class ParentClass {
protected Collection messages;
public void setMessages(Collection messages)
{
this.messages = messages;
}
}
型com.package.ChildClass.java
个
public class ChildClass extends ParentClass implements ParentInterface {
}
型com.package.KotlinClass.kt
个
class KotlinClass: ChildClass()
型
在最后一个Kotlin类中,我遇到了以下错误:“Class 'KotlinClass'不是抽象的,也没有实现基类成员public abstract fun setMessages(var 1:(Mutable)Collection!):Unit defined in com.package.ChildClass.
当我接受使用IDE生成方法实现的建议时,我有:override fun setMessages(var1: MutableCollection<String>?) { }
个
我在生成的方法上得到以下错误:
意外覆盖:以下声明具有相同的JVM签名(setMessages(Ljava/util/Collection;)V):
public open fun setMessages(messages:(MutableCollection.. Collection<>?)):在com.package.KotlinClass中定义的单元
*public open fun setMessages(var 1:MutableCollection?):在com.package.KotlinClass中定义的单元
而且我只能修改KotlinClass,因为其他类都是Java中第三方库的类,请帮帮忙,我已经在这个问题上花了很多时间。
3条答案
按热度按时间mv1qrgav1#
你可以用纯Kotlin克服这个限制,但是你会在过程中失去一些功能/可能会在过程中引入一些不必要的但明显的错误,所以你应该在继续之前真正调查这个方法的使用情况,因为你需要基本上完全“切断”这个方法以修复编译错误。
因此,在您的特定情况下,我知道您在Kotlin上为Jira开发Atlassian插件。这是必不可少的,因为我们知道这种方法可以在您的情况下避免。
问题类为:
com.atlassian.jira.web.action.JiraWebActionSupport
接口:
com.atlassian.jira.util.ErrorCollection
而罪魁祸首的方法是:
void setErrorMessages(Collection<String> var1);
父类为
webwork.action.ActionSupport
它包含
protected Collection errorMessages;
这就是你如何切断这条死肢:
字符串
在你的情况下,Java覆盖当然更可取,因为你不会丢失任何东西,也不会引入潜在的错误,但如果你只需要Kotlin,并确保你不/不会使用这个方法-这个小肮脏的黑客将有所帮助。
xcitsw882#
我有一个类似的问题,但它是在如何类的内在性正在制定。它涉及到一个函数
getInfo
被定义为空和nonullable参数。字符串
我的意思是,在上面的类定义中,
ess.GeneralElement()
是问题发生的地方。在另一个班级
型
观察到错误消息
型
令人困惑的部分(至少对当时的我来说)是,它显示了具有不同空属性的相同函数。
修复方法是在
GeneralElement
类中的getinfo
的参数中添加nullable说明符。这使得getinfo函数相等并删除了错误。hpcdzsge3#
我在使用与Java交互的类时,在Kotlin中遇到了JVM签名冲突。问题是在Kotlin到Java字节码编译后,两个setErrorMessages方法具有相同的JVM签名。为了解决这个问题,我扩展了一个Java类并覆盖了Kotlin中的方法,以确保兼容性并避免冲突。下面是解决方案:
字符串