Java AOP?适配器?反思?如何泛化setter方法(不抽象目标对象)
我想为任何可以使用setBar或setFoo的对象创建一个通用setter。这些类位于库中,因此我无法调整这些类中任何一个从父类型继承的源 约束:我使用的是第三方库,这使得我无法为这些对象提供一个父类进行扩展 e、 g: 我试图确定以下几点: 是否有任何方法可以使用AOP或反射来创建适配器设计模式,以绕过约束并限制处理每个对象的setter所需的代码量 我可以采取哪些步骤来创建一个方法,该方法将覆盖这些对象的设置器(如果调用)您可以使用这些对象来实现一个公共接口:Java AOP?适配器?反思?如何泛化setter方法(不抽象目标对象),java,Java,我想为任何可以使用setBar或setFoo的对象创建一个通用setter。这些类位于库中,因此我无法调整这些类中任何一个从父类型继承的源 约束:我使用的是第三方库,这使得我无法为这些对象提供一个父类进行扩展 e、 g: 我试图确定以下几点: 是否有任何方法可以使用AOP或反射来创建适配器设计模式,以绕过约束并限制处理每个对象的setter所需的代码量 我可以采取哪些步骤来创建一个方法,该方法将覆盖这些对象的设置器(如果调用)您可以使用这些对象来实现一个公共接口: interface Commo
interface CommonInterface {
void setBar(String str);
void setFoo(String str);
}
class Object1Adapter implements CommonInterface {
private final Object1 obj;
public Object1Adapter(Object1 obj) {
this.obj = obj;
}
@Override
public void setBar(String str) {
obj.setBar(str);
}
...
}
class Object2Adapter implements CommonInterface {...}
class Object3Adapter implements CommonInterface {...}
然后,您可以将适配器存储在CommonInterface
类型下
如果要使用1漏斗方法调用
CommonInterface
中的setter,可以这样做(您仍然需要适配器类):
然后您可以像这样使用它:
CommonInterface obj = new Object1Adapter(new Object1());
obj.set(CommonInterface.Setter.Bar, "Hello"); // Uses 'setBar'
我很困惑。你真正的目标是什么?您想要一个接受三个参数(每个setter一个)的方法吗?你说的单一方法是什么意思?你真的想在你马上扔掉的对象上调用setter吗?你能举个例子说明你的单一方法是如何被调用的,以及它会做什么吗?例如,是否要对属于object1、object2或Object3类的任何对象调用SetSetSetter2(..)?如果不是这样,它应该怎么做?我的问题是。目标是制造一个共同的挫折和挫折。请记住,我不能给它一个接口来实现。
interface CommonInterface {
enum Setter {
Bar,
Foo;
}
void setBar(String str);
void setFoo(String str);
default void set(Setter set, String value) {
switch(set) {
case Bar:
setBar(value);
break;
case Foo:
setFoo(value);
break;
default: // Do nothing
}
}
}
CommonInterface obj = new Object1Adapter(new Object1());
obj.set(CommonInterface.Setter.Bar, "Hello"); // Uses 'setBar'