Мне нужен доступ к классу объекта, который создается в его собственном конструкторе (по разным подробным причинам, я не думаю, что он имеет отношение к моему вопросу).
Я хочу что-то вроде этого
class Foo(val i:Int)
class Bar extends Foo(this.getClass.getName.length)
val b = new Bar
println(b.i)
для печати 3 ("Бар". Длина). Но это не так. Если приведенный выше код находится внутри какого-либо другого объекта, «this» относится к этому объекту. Если приведенный выше код не находится внутри какого-либо другого объекта (только в некотором пакете), компилятор жалуется на
error: this can be used only in a class, object, or template
class Bar extends Foo(this.getClass.getName)
^
УТОЧНЕНИЕ: я не могу изменить Foo, чтобы использовать val в его теле вместо его конструктора, потому что API Foo уже существует и является фиксированным (поэтому, да, i должен быть параметром конструктора). Ему нужен целочисленный аргумент во время конструктора, но это целое число может быть вычислено только с доступом к классу.
(Я знаю, что приведенный выше пример все еще глупый и вырожденный. Если людям все равно, я могу подробно объяснить, почему мне нужен класс в моем реальном проекте, http://code.google.com/p/factorie)
Конечно, класс создаваемого объекта известен компилятору и среде выполнения во время построения. С каким синтаксисом я могу его получить? (Нет ли такого синтаксиса? Если нет, я удивляюсь, почему. Я удивлен, что, кажется, не существует простого, стандартного способа получить это.)