java - 包对象中的类型定义 "hijacking"scala代码中java类的继承

标签 java scala inheritance package

我有以下情况:

我有一个像这样的 Java 类层次结构:

package org.foo.some;
public class Model extends org.foo.some.GenericModel { // ... }

package org.bar;
public class MyModel extends org.foo.some.Model { // ... }

哪里org.foo.some.Modelorg.foo.some.GenericModel超出了我的能力范围(不是我的代码)。在 Scala 中,也超出了我的能力范围,有:

package org {
  package foo {
    package object some {
      type Model = org.foo.some.ScalaModel
    }
  }
}

这会导致 Scala 代码中出现有趣的行为,例如

val javaModel:MyModel = new org.bar.MyModel()

trait FooTrait[T <: org.foo.some.GenericModel] { // ... }

class FooClass extends FooTrait[MyModel] { //... }

无法编译并引发以下错误:

type arguments [org.bar.MyModel] do not conform to trait FooTrait's type parameter bounds [T <: org.foo.some.GenericModel]

此外,我无法调用 org.foo.some.Model 的任何方法也不属于org.foo.some.GenericModeljavaModel :

javaModel.doSomething()

加薪

value create is not a member of org.bar.MyModel

我的印象是,包对象“劫持”了 Scala 代码中 Java 类层次结构的可见性。确实,ScalaModel不扩展org.foo.some.GenericModel .

是否有办法仍然可以从 Scala 代码中访问层次结构?

编辑:当重新编译我无法触及的代码并删除类型重新定义时,一切正常。所以我认为我正在寻找一种“禁用”特定类的包级类型定义的方法。

最佳答案

您是否使用 GUI(特别是 Eclipse)来构建您的项目?

这似乎与 Scala trouble accessing Java methods 有关(没有答案,但普遍的共识是问题不在于 scala,而在于 Eclipse)。

关于java - 包对象中的类型定义 "hijacking"scala代码中java类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130811/

相关文章:

ruby - 如何在初始化父类时返回子类的新实例?

java - StreamSupplier 的 IllegalStateException

ScalaTest 和 SBT : Reporting progress of test suite?

scala - 是否可以在初始定义后将字段添加到表单的映射中?

Scala - map 和平面 map 之间的区别

java - super() 在构造函数中是什么意思?

c++ - 在构造函数中使用对象

java - 在 ActionEvent 期间更改标签

java - 如何测试JDBC驱动是否安装正确,DB是否可以连接?

java - 调查垃圾收集周期原因