gpt4 book ai didi

java - 如何定义方法返回 this 的结构类型

转载 作者:行者123 更新时间:2023-11-30 06:10:39 24 4
gpt4 key购买 nike

我有许多 Builder,它们来自库,源代码是用 Java 自动生成的,超出了我的控制范围。这些 Builder 彼此没有关系,但它们有许多结构完全相同的方法。

package a.b

public class Builder {
public Builder setA(xxx) {}
public Builder setB(yyy) {}
}

package a.c

public class Builder {
public Builder setA(xxx) {}
public Builder setB(yyy) {}
}

使用 Scala 的结构类型,如何返回构建器本身?

type StructurallyBuilder = {
def setA(xxx): StructurallyBuilder
def setB(yyy): StructurallyBuilder
}

当我想在 StructurallyBuilder 上使用 setA 和 setB 时,编译器提示它无法解析。

最佳答案

这不是很简单,但我相信你可以使用 F-bounded polymorphism实现这一目标:

type StructurallyBuilder[F <: StructurallyBuilder[F]] = {
def setA(xxx: Int): F
def setB(yyy: Int): F
}

在定义采用这些构建器的类或方法时,您必须保留这个复杂的签名。例如:

def setA[T <: StructurallyBuilder[T]](
xxx: Int,
builder: StructurallyBuilder[T]
): T = builder.setA(xxx)

但看起来你可以正常使用那些方法:

val bld: a.c.Builder = setA(10, new a.c.Builder())

关于java - 如何定义方法返回 this 的结构类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com