在Scala中,有像java.lang.Class和的metaobjects java.lang.reflect.Method.但是特征存在什么元对象?
class Foo {
def foo = "foo"
}
var obj = classOf[Foo]
obj // java.lang.Class[Foo] = interface Foo
Run Code Online (Sandbox Code Playgroud)
它打印界面.这是什么?
上面的输出让我感到惊讶 - 它应该打印一个类.除非你想宣布trait Foo.您使用的Scala版本是什么?
每晚给出以下输出:
Welcome to Scala version 2.9.0.r23117-b20100929093241 (Java HotSpot(TM) Server VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
scala> class Foo {
| def foo = "foo"
| }
defined class Foo
scala> var obj = classOf[Foo]
obj: java.lang.Class[Foo] = class Foo
Run Code Online (Sandbox Code Playgroud)
在Scala JVM实现中,Scala类通常被转换为JVM字节码类.如果一个特征只包含这里的方法声明:
trait Foo {
def foo: String
}
Run Code Online (Sandbox Code Playgroud)
Java接口Foo由编译器生成.
如果它也有定义,就像这里:
trait Foo {
def foo = "foo"
}
Run Code Online (Sandbox Code Playgroud)
编译器将生成一个接口Foo和一个所谓的实现类,其名称Foo$class包含实际的方法体.程序员看不到此实现类.它用于引擎盖下的mixin-composition.
在这两种情况下,如果使用classOf构造来获取特征的Class对象,您将获得特征的接口的标准Java类对象Foo,您可以使用它来检查方法,Foo就像执行它一样.对于课程.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |