如何修复嵌套抽象类中的错误

问题描述 投票:0回答:1

我在乘法函数中找到一个“参数类型不匹配”错误,并且不知道如何修复它。任何帮助欢迎。谢谢。代码是:

abstract class Semigroup<T1> {

abstract val one : SemigroupElement<T1>
abstract fun builder(x: T1): SemigroupElement<T1>
abstract val binOp: (SemigroupElement<T1>, SemigroupElement<T1>) -> SemigroupElement<T1>

abstract inner class SemigroupElement<T1> {

    fun multiply(other: SemigroupElement<T1>) = binOp(this, other)  // Argument type mismatch
    abstract val value: T1

}

}

kotlin nested inner-classes
1个回答
0
投票

当您将所有类型的参数命名时(

T1
)时,它变得混乱。

LLET的第一个重命名类的类型参数

Semigroup

T1
T
以及类的类型参数从
SemigroupElement
T1
然后您有以下代码:
E

现在很清楚为什么这是不起作用的:摘要

abstract class Semigroup<T> { abstract val one : SemigroupElement<T> abstract fun builder(x: T): SemigroupElement<T> abstract val binOp: (SemigroupElement<T>, SemigroupElement<T>) -> SemigroupElement<T> abstract inner class SemigroupElement<E> { fun multiply(other: SemigroupElement<E>) = binOp(this, other) // Argument type mismatch abstract val value: E } }
需要两个
binOp

,但是您为其提供了两个

SemigroupElement<T>
。由于
SemigroupElement<E>
T
在任何方面都不相关,因此编译器抗议的错误“ type不匹配”。
尚不清楚您想实现的目标,但看起来您甚至根本不需要类型参数。由于SemigroupElement是(外部)类半群的
Inner
1类,因此只能在半群的实例中存在。因此,您可以访问Outer类'类型参数E

,然后让

SemigroupElement

为该类型:
T
1
:不是您的问题标题所暗示的;嵌套类不会具有
value
修饰符,即使没有外部类的实例,也允许它的实例。在这里,您有一个

Inner
类,而不是一个
nested
类。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.