加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从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原始超类的问题.
我想坚持只使用Scala,也知道是否有一个我缺少的解决方案,以及是否有一个改进我可以建议SonarSource人员在他们身边(使用原始类型).

我已经读到了这方面存在的问题,以及某些情况下的一些解决方法,但似乎没有适用于此处(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) {
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读