继承,强转,泛型解决设置共同属性的问题
有个妹子比较懒,改造自己的方法的时候,为了省时省力找到了我,尽量少改代码,实现为对象赋值的功能。这些属性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;
}
}
浙公网安备 33010602011771号