更改实例方法的返回值



我想调整实例类中方法的返回值,但我不太确定是否可以使用反射。我想不通,所以我想在这里问一下。举个例子,我有下面的类Foo:

public final class Foo {

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

}

一些上下文:

  • Foo类来自外部库
  • Foo级别不可调整
  • Foo类不可扩展

因此,在这个基本示例中,我希望从方法getName((返回Bar,而不是Foo。非常明确地说:

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

我为什么需要这个

我需要将这个Foo实例传递给另一个只接受Foo类型对象的方法。此方法将调用方法getName((并进行一些额外的计算。

实际用例:

我会尽量提供更多的上下文,希望它会更清楚一点。构造器类中有一个方法正在接受KeyManagerFactory的实例,该方法称为setKeyManagerFactory(KeyManagerFactory keyManagerFactory)。这个构建器类将在KeyManagerFactory上内部调用getKeyManagers,并返回KeyManagers[]

KeyManagerFactory是一个最终类,它根本没有公共构造函数。getKeyManager方法也是最终方法。我已经有了一个KeyManager[],所以我想破解这个KeyManagerFactory,以返回我自己的数组自己的KeyManagers,并将其提供给生成器。

由于您说过初始类是最终类,无法初始化,因此您无能为力。

根据我对这个问题的理解,可能会创建一个新的类,其中包含一个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"

请注意,bar对象的getBiz函数仅调用Foo对象的getBiz函数,而不更改其返回值。

最新更新