【发布时间】:2016-06-06 16:24:07
【问题描述】:
我想将一个方法添加到我无法控制的现有类中,例如在 Java8 的 Stream 类中有一个 toList() 方法。问题是这是否可以使用 ASM 完成。大概吧。
我更具体的问题是我是否可以创建一个包含扩展方法的 jar 之类的东西(例如类 Stream)。然后我可以将 jar 添加到我的项目中,并且 toList() 方法在 Java8 Stream 类中变得可见。据我了解,扩展方法只能在运行时或当我有一个可以执行此操作的运行时(如 Groovy、Kotlin、Scala)时编织。我知道有 Lombok 项目,但它只有一个支持相应功能的 eclipse 插件。 IntelliJ 的插件不支持此特定功能。
【问题讨论】:
-
添加一个方法......显而易见的方法是扩展类,并将该方法添加到子类中
-
是的,没错。不过,我想要的是类似于 Groovy、Kotlin、Scala、Smalltalk、C# 和其他语言中的扩展方法(子类 String 无济于事),而不必恢复到这些语言中的任何一种。
-
你不能子类化字符串,因为它是一个不可变的类。但是,您可以创建复合对象
-
没错,但问题是关于扩展方法而不是子类化。
-
确实如此,但是您的示例:“更改字符串”基本上根本不是您应该(尝试)做的事情。
标签: java extension-methods java-bytecode-asm