gpt4 book ai didi

java - 使用 Scala 中的原始类型实现 Java 接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:31 27 4
gpt4 key购买 nike

我正在尝试使用 Scala 为 Sonar 构建一个扩展。我需要扩展以下 Java 接口(interface):

public interface Decorator extends BatchExtension, CheckProject {
void decorate(Resource resource, DecoratorContext context);
}

但是资源类型实际上是这样定义的:

public abstract class Resource<PARENT extends Resource>

我知道我可以解决创建 Java 原始父类(super class)的问题。我想坚持使用 Scala-only,也知道是否有我遗漏的解决方案,以及我是否可以建议 SonarSource 人员站在他们这边(使用原始类型)进行改进。

我读到过这方面的问题,以及某些情况下的一些解决方法,但似乎都不适用于此处( a workaroundan apparently fixed ticket ,还有票 2091...)

最佳答案

经过反复试验并查看错误消息后,我想出了可以编译的代码:

import org.sonar.api.batch._
import org.sonar.api.resources._

object D {
type R = Resource[T] forSome {type T <: Resource[_ <: AnyRef]}
type S[T] = Resource[T] forSome {type T <: Resource[_ <: AnyRef]}
}

class D extends Decorator {
def decorate(r: D.R, context: DecoratorContext) {}
//def decorate(r: D.S[_], context: DecoratorContext) {} // compiles too
def shouldExecuteOnProject(project: Project) = true
}

我不确定它是否能让您实现所需的功能。我看了Resource , 它可以代表 File延伸Resource<Directory>或者有时是一个删除的(原始的?)类型,它只是扩展 Resource喜欢 Directory .

编辑:再考虑一下,forSome可以消除 - 这也编译:

def decorate(resource: Resource[_ <: Resource[_ <: AnyRef]],
context: DecoratorContext) {
}

关于java - 使用 Scala 中的原始类型实现 Java 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875130/

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