【发布时间】:2016-10-17 17:20:01
【问题描述】:
我对 scala 很陌生,现在我必须从事一个用 scala 和 java 编写的项目。我遇到了这样的结构:
class SomeType{
//...
}
trait Trait1 extends scala.AnyRef{
}
trait Trait2 extends extends scala.AnyRef{
}
class MyClass(arg : SomeType) extends Trait1{
//...
}
object MyClass extends Trait2{
//...
}
这有点让人麻木。据我通过阅读answer 得到的,我们可以将objects 视为具有抽象方法的类。 IE。我们可以(在我看来)在 java 中使用Class<T> 对象定义一些映射。
但在此示例中,class 和 object 扩展了 不同 traits。这就是我真正感到困惑的地方。我无法想象它的含义以及使用它的原因。
【问题讨论】:
-
你的问题到底是什么?
-
我们不能将对象视为具有抽象方法的类。对象只是单例。
-
对于 jvm 对象(不完全是)一个常规类,比如说
SomeObject。但是 scala 还会生成另一个静态值包含instance = new SomeClass()的类,因此当您访问SomeObject.someMethod时,您实际上是在调用instance.someMethod -
您引用的答案说将对象视为“隐式定义的类的单例”。也就是说,它也是一个对象。也许以下链接会对您有所帮助:docs.scala-lang.org/tutorials/tour/singleton-objects.html。最值得注意的是它说'scala中没有静态关键字'。所以对象在java程序员认为静态的地方被使用..为什么有区别?他们来自不同的思想流派。 Scala 深受 Haskell 的影响,Java 深受 C/C++ 的影响。