【问题标题】:Creating an extension to a class?创建一个类的扩展?
【发布时间】:2011-12-11 18:43:53
【问题描述】:

在 C# 和 Objective C 等某些语言中,您可以创建类扩展。这意味着您可以向现有类添加其他方法,而无需扩展该类。这在 Java 中可行吗?

【问题讨论】:

    标签: java class-extensions


    【解决方案1】:

    正如 Oli 所说,这是不可能的。

    值得一提的是,C#中的扩展方法只是调用静态方法的一种奇特方式,所以虽然看起来像

    someobject.MyExtensionMethod();
    

    然后编译器将其转换为

    SomeStaticClass.MyExtensionMethod(someobject);
    

    你并没有真的向对象添加方法

    【讨论】:

    • 有趣,我对C#一无所知
    • 我不同意。扩展确实扩展了类。例如,如果我将方法本地化()添加到字符串对象,我可以将该方法与任何字符串对象一起使用。无需使用派生。
    • 我想你误解了我的意思,你说的不是真的,只有导入命名空间才能调用那个方法
    【解决方案2】:

    不,不是标准 Java。

    【讨论】:

      【解决方案3】:

      您可以使用AspectJ,它使用编译时编织来添加到字节码中。

      【讨论】:

      • 我觉得为此目的使用 AOP 是过度工程 :)
      • 可能是,也不是语言结构,但我想提一下
      【解决方案4】:

      我不知道允许您这样做的语言结构,但您可以使用装饰器模式来实现您的目标。

      【讨论】:

        【解决方案5】:

        这可以通过 lombok 库实现。有一个注解叫做@ExtensionMethod。

        这为您提供了该功能。

        https://projectlombok.org/features/experimental/ExtensionMethod.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-15
          • 2015-06-08
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-07
          相关资源
          最近更新 更多