更改示例方法的返回值

ecfsfe2w  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(296)

我想从一个示例类中调整一个方法的返回值,我不太确定是否有反射。我想不通,所以我想在这里问一下。例如,假设我有以下类foo:

public final class Foo {

    public final String getName() {
        return "Foo";
    }

}

一些背景:
foo类来自外部库
foo类不可调整
foo类不可扩展
因此,在这个基本示例中,我希望从getname()方法而不是foo获得返回的bar。非常明确地说:

Foo foo = new Foo();
String name = foo.getName();
System.out.println(name) //prints "Bar"

为什么我需要这个?
我需要把foo的这个示例传递给另一个只接受foo类型的对象的方法。此方法将调用方法getname(),并执行一些额外的计算。
实际用例:
我会尽量给出更多的背景,希望能更清楚一点。生成器类中有一个方法正在接受的示例 KeyManagerFactory 一个名为 setKeyManagerFactory(KeyManagerFactory keyManagerFactory) . 此生成器类将在内部调用 getKeyManagers 在keymanagerfactory上,它将返回 KeyManagers[] keymanagerfactory是最后一个类,它根本没有公共构造函数。getkeymanager方法也是最终的。我已经有一个 KeyManager[] 所以我想破解这个keymanagerfactory,返回我自己的数组,而不是我自己的keymanagers,并将其提供给构建器。

yfjy0ee7

yfjy0ee71#

既然您说过初始类是最终类,不能示例化,那么您就无能为力了。
根据我对这个问题的理解,创建一个包含 Foo 对象及其所有方法。然后当您从新创建的 Bar 类,则可以对父级调用相同的函数。当然,除了你的 getName 功能。

public final class Foo {

    public String getName() {
        return "Foo";
    }

    public String getBiz() {
        return "Biz";
    }

}

public class Bar {

   private Foo foo;

   public Bar() {
      this.foo = new Foo();
   }

   public String getName() {
      return "Bar";
   }

   public String getBiz() {
      return this.foo.getBiz();
   }
}

Bar bar = new Bar();
String name = bar.getName();
System.out.println(name) //prints "Bar"

String biz = bar.getBiz();
System.out.println(biz) //prints "Biz"

注意这里 getBiz 系统的功能 bar 对象只调用 getBiz 系统的功能 Foo 对象,而不更改其返回值。

相关问题