使用Scala中的原始类型实现Java接口
我正在尝试使用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> 公
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) {
}