gpt4 book ai didi

scala - Scala 是否允许泛型对象的任意实例化?新 B {}?

转载 作者:行者123 更新时间:2023-12-04 17:29:57 25 4
gpt4 key购买 nike

我想知道这样的事情是否可以在 Scala 中实现:

def f[B <: AnyRef]()(implicit ct: ClassTag[B]): B = {
new B {
override def equals(o: Any) = ...
override def hashcode(o: Any) = ...
}
}

我的直觉是,即使使用 ClassTag应该不可能实例化任意 B ,因为我们不知道它是否甚至有一个 no-args 参数。

但我得到的实际错误是:
class type required but B found

我当前的用例是:我希望能够重新定义提供给我的任意对象的 equals/hashcode(我无法真正摆脱它,因为我必须将对象交付给一些有问题的框架将使用这些对象的等于/哈希码,所以我无法控制)。
这样做的明显方法是通过继承。有没有办法做到这一点?

最佳答案

一般情况下肯定是不可能的。

假设我通过了 final输入 B ,例如 String .没有办法对它进行子类化。所以,你不能为任意 B 做这件事.

根据其他框架的工作方式,您可能可以将 AnyRef 传递给它。反而。否则,您可能可以使用宏实现某些功能,但需要更多信息来确定这一点。

关于scala - Scala 是否允许泛型对象的任意实例化?新 B {}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54339446/

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