我想调整实例类中方法的返回值,但我不太确定是否可以使用反射。我想不通,所以我想在这里问一下。举个例子,我有下面的类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
函数,而不更改其返回值。