【发布时间】:2011-04-17 21:17:34
【问题描述】:
我需要访问在其自己的构造函数中构造的对象的类(出于各种我认为与我的问题无关的详细原因)。
我想要这样的东西
class Foo(val i:Int)
class Bar extends Foo(this.getClass.getName.length)
val b = new Bar
println(b.i)
打印3(“栏”.Length)。但事实并非如此。如果上面的代码在某个其他对象中,“this”指的是那个对象。如果上面的代码不在某个其他对象中(只是在某个包中),编译器会报错
error: this can be used only in a class, object, or template
class Bar extends Foo(this.getClass.getName)
^
澄清:我不能将 Foo 更改为在其主体中使用 val 而不是其构造函数,因为 Foo 的 API 已经存在并且是固定的(所以,是的,i 必须是构造函数参数)。它在构造函数时需要一个整数参数,但该整数只能通过访问类来计算。
(我知道上面的例子还是很傻很堕落。如果有人关心,我可以详细解释一下为什么我在实际项目中需要这个类,http://code.google.com/p/factorie)
在构造过程中,编译器和运行时肯定知道正在构造的对象的类。我可以获得什么语法吗? (没有这样的语法吗?如果没有,我想知道为什么。我很惊讶似乎没有一种简单、标准的方法来获得它。)
【问题讨论】:
-
这是我在 StackOverflow 上发布的第一个问题。如此迅速地得到答案真是令人难以置信。谢谢你们。然而,我现在看到,我必须使我的示例更复杂,以更好地反映我的真实用例。我认为现在要做的是编辑我的问题。我现在要这样做。 span>
-
您是否意识到对公共
val的访问仍由(常规多态)方法介导? -
@chrispy:感谢您的建议,但 Geoff Reedy 的回答对原始问题和稍微编辑的问题都有效。他的答案现在被接受了。 span>
标签: scala constructor