Вышеприведенный результат является для меня неожиданностью - он должен печатать класс. Если вы не хотите объявить 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
В классах реализации Scala Scala JVM обычно переводится в класс JVM байт-кода. Если признак состоит только из объявлений методов, как здесь:
trait Foo {
def foo: String
}
интерфейс Java Foo
генерируется компилятором.
Если имеет значения, как хорошо, как здесь:
trait Foo {
def foo = "foo"
}
компилятор генерирует интерфейс Foo
и так называемый класс реализации с именем Foo$class
, который содержит фактические тела методов. Этот класс реализации не отображается программисту. Он используется для смешивания композиции под капотом.
В обоих случаях, если вы используете classOf
конструкцию, чтобы получить объект класса признака, вы получите стандартный объект класса Java для интерфейса признака Foo
, который вы можете использовать для проверки методов Foo
в так же, как и для классов.
Err ... 2.8.0.final принты Скал java.lang.Class [Foo] = класс Foo Foo –