首页 > 解决方案 > 如何允许调用者调用案例类字段的方法?

问题描述

我不确定此模式的关键字,如果问题不清楚,请见谅。

如果你有:

case class MyFancyWrapper(
   somethingElse: Any,
   heavyComplexObject: CrazyThing
)

val w = MyFancyWrapper(???, complexThing)

我希望能够w.method使用来自complexThing. 我尝试过,extends CrazyThing但这是一个特点,我不想实现所有非常乏味的方法。我也不想这样做:

def method1 = heavyComplexObject.method1
...

为他们所有人。

有什么解决办法吗?

谢谢。

标签: scala

解决方案


您可以使用宏来执行此操作,但我同意 Luis 的观点,即这是一种矫枉过正的做法。宏旨在重复无聊的事情,而不是一次无聊的事情。此外,这并不像听起来那么简单,因为您可能不想通过所有方法(您可能仍然想要自己的hashCodeand equals)。最后,宏的 IDE 支持很差,所以很可能所有这些方法都没有自动完成功能。另一方面,如果你确实使用了一个好的 IDE(比如 IDEA),那么很可能有一个像“委托方法”这样的操作会为你生成大部分代码。您仍然需要将返回类型从 to 更改UnitMyFancyWrapper并在每个方法的末尾添加返回this,但这可以通过批量替换操作轻松完成(提示:将“ }”替换为“this }" 并且自动重新格式化代码应该可以解决问题)

以下是 JetBrains IDEA 的一些流程截图:

委托方法步骤 #0

委托方法步骤 #1

委托方法步骤 #2


推荐阅读