从Scala实现具有Raw类型的Java接口
发布时间:2020-12-16 18:46:36 所属栏目:安全 来源:网络整理
导读:我正在尝试使用 Scala为Sonar构建扩展. 我需要扩展以下 Java接口: public interface Decorator extends BatchExtension,CheckProject { void decorate(Resource resource,DecoratorContext context);} 但资源类型实际上定义如下: public abstract class Re
我正在尝试使用
Scala为Sonar构建扩展.
我需要扩展以下 Java接口: public interface Decorator extends BatchExtension,CheckProject { void decorate(Resource resource,DecoratorContext context); } 但资源类型实际上定义如下: public abstract class Resource<PARENT extends Resource> 我知道我可以解决创建Java原始超类的问题. 我已经读到了这方面存在的问题,以及某些情况下的一些解决方法,但似乎没有适用于此处(a workaround,an 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,它可以代表扩展资源<目录>的文件.或者有时候是一个擦除(原始?)类型,它只是为目录扩展??资源. 编辑:考虑一下,forSome可以被淘汰 – 这也编译: def decorate(resource: Resource[_ <: Resource[_ <: AnyRef]],context: DecoratorContext) { } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |