继承,强转,泛型解决设置共同属性的问题
有个妹子比较懒,改造自己的方法的时候,为了省时省力找到了我,尽量少改代码,实现为对象赋值的功能。这些属性set方法一致。
我这里想到的三个方法如下:
1.写一个基类,基类中定义共同的属性,那么就可以调用基类的方法实现对属性赋值。 见 test1
2.在赋值的方法中将所有需要赋值的类型枚举出来,分别强转然后赋值。 见test2
3.使用泛型,反射调用方法。 见test3
JunitTest.java
package yun.web; import org.junit.Test; public class JunitTest { @Test public void test1() { BaseTest a = new C(); BaseTest b = new D(); a.setName("zs"); b.setName("lisi"); System.out.println(a.getName()); System.out.println(b.getName()); } @Test public void test2() { A a = new A(); B b = new B(); ReflectTest<A> ta = new ReflectTest<JunitTest.A>(); ReflectTest<B> tb = new ReflectTest<JunitTest.B>(); ta.setParam2(a); tb.setParam2(b); System.out.println(a.getName()); System.out.println(b.getName()); } @Test public void test3() { A a = new A(); B b = new B(); ReflectTest<A> ta = new ReflectTest<JunitTest.A>(); ReflectTest<B> tb = new ReflectTest<JunitTest.B>(); ta.setParam3(a); tb.setParam3(b); System.out.println(a.getName()); System.out.println(b.getName()); } class A { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } class B { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } class C extends BaseTest { } class D extends BaseTest { } }
ReflectTest.java
package yun.web; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTest<T> { public void setParam3(T t) { try { Method m = t.getClass().getDeclaredMethod("setName", String.class); m.invoke(t, "zs"); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } public void setParam2(T t) { if (t instanceof yun.web.JunitTest.A) { ((yun.web.JunitTest.A) t).setName("qihh"); } if (t instanceof yun.web.JunitTest.B) { ((yun.web.JunitTest.B) t).setName("guozl"); } } }
BaseTest.java
package yun.web; public class BaseTest { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }