【问题标题】:How can I change Java method implementation of single instance?如何更改单个实例的 Java 方法实现?
【发布时间】:2012-11-13 22:14:24
【问题描述】:

更改单个java 对象 的方法签名的正确方法是什么。假设我想更改toString 方法。

myObject.metaClass.toString = { pritln "hello world" }

看起来这段代码有问题。如果我将我的对象传递给其他 Java 编译对象,原始 toString 将被调用。

其他solution 创建包装器Object。它与原来的等级不同,所以它不能满足我


添加:
1.我无法控制创建过程
2.不知道object是怎么实例化的

那么没有常规方法可以解决这个问题吗? 唯一的解决方案是创建 Java 包装类,包装所有方法并更改一个?这是一个...

【问题讨论】:

    标签: java groovy metaprogramming


    【解决方案1】:

    如果您想创建一个更改了单个方法的对象,可以使用“匿名类”来实现。

    每当创建你的对象时:

    MyClass myObject = new MyClass() {
        public String toString() {
            ...implementation...
        }
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用一个令人讨厌的子类吗?这只会覆盖该单个实例中的 toString() 方法。

      MyObject myObject= new MyObject (){
          @Override
          public String toString (){
               println "hello world"
          }
      };
      

      【讨论】:

        【解决方案3】:

        您对元类所做的任何更改仅对 groovy 可见。

        java 不知道 metaClass 的存在,所以显然不能调用它定义的任何替换方法

        【讨论】:

          【解决方案4】:

          创建一个扩展原始的包装器:

          public class wrapper extends myObject{
              public toString{
                  System.out.println("hello world");
              }
          }
          

          【讨论】:

          • OP 声明他不想使用包装类。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-19
          • 2013-07-16
          • 2022-07-29
          • 1970-01-01
          相关资源
          最近更新 更多