gpt4 book ai didi

scala:如何在自己的构造函数中获取类

转载 作者:行者123 更新时间:2023-12-04 22:08:24 24 4
gpt4 key购买 nike

我需要访问在其自己的构造函数中构造的对象的类(出于各种我认为与我的问题无关的详细原因)。

我想要这样的东西

class Foo(val i:Int)
class Bar extends Foo(this.getClass.getName.length)
val b = new Bar
println(b.i)

打印 3 ("Bar".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 已经存在并且是固定的(所以,是的,我必须是构造函数参数)。它在构造函数时需要一个整数参数,但该整数只能通过访问类来计算。

(我知道上面的例子还是很傻很堕落。如果有人关心,我可以详细解释为什么我在我的真实项目中需要这个类, http://code.google.com/p/factorie )

当然,正在构造的对象的类在构造过程中对于编译器和运行时是已知的。我可以用什么语法得到它? (没有这样的语法吗?如果没有,我想知道为什么。我很惊讶似乎没有一种简单的标准方法来获得它。)

最佳答案

你将不得不解释你想要这样做的动机。 name 必须是 Foo 的构造函数参数还是可以是抽象成员?它必须是 val 还是 def 可以。

你可以这样做

class Foo(val name: String)
class Bar extends Foo("") {
override val name = getClass.getName
}

new Bar().name 会给 Bar

但我怀疑,如果知道你真正的动机,那么就有更好的方法来做你真正想做的事。

关于scala:如何在自己的构造函数中获取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com