使用Scala中的原始类型实现Java接口

使用Scala中的原始类型实现Java接口,java,scala,generics,sonarqube,scala-java-interop,Java,Scala,Generics,Sonarqube,Scala Java Interop,我正在尝试使用Scala为声纳建立一个扩展。 我需要扩展以下Java接口: public interface Decorator extends BatchExtension, CheckProject { void decorate(Resource resource, DecoratorContext context); } 但是资源类型实际上定义如下: public abstract class Resource<PARENT extends Resource> 公

我正在尝试使用Scala为声纳建立一个扩展。 我需要扩展以下Java接口:

public interface Decorator extends BatchExtension, CheckProject {
    void decorate(Resource resource, DecoratorContext context);
}
但是资源类型实际上定义如下:

public abstract class Resource<PARENT extends Resource>
公共抽象类资源
我知道我可以解决创建Java原始超类的问题。 我只想坚持使用Scala,还想知道我是否缺少一个解决方案,以及我是否可以建议人们在使用原始类型时做出改进


我已经读到了这方面的问题,以及一些案例的解决办法,但似乎都不适用于这里(,还有罚单2091…

我不知道答案,但如果我写

def decorate(r: Resource[Resource[_]])
我犯了一个错误


类型参数[Resource[\u]]不符合类资源的类型参数界限[PARENT经过一些尝试和错误并查看错误消息后,我得出了以下结论:

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[\ux]
似乎它应该能工作,但出于某种原因它不能工作。huynhjl,你就是那个人!我真的认为没有办法解决这个问题。我认为scala java interop的这些解决方案应该被记录在某个地方。@Roman,是的,我记得在试图实现
SolrRequestHandler
时遇到了一个更简单的问题。我很好奇,在解决您的问题时,您是在哪里尝试查看此类信息的?我有我的想法,可以在哪里添加这些信息,但如果人们不在这里查找这些信息,这将不会有什么好处。我在这里进行了第一次搜索。当然,在docs.Scala-lang.org上有一个Java/Scala互操作条目会很好,您不这样认为吗?
def decorate(resource: Resource[_ <: Resource[_ <: AnyRef]],
             context: DecoratorContext) {
}