莫大人

继承,强转,泛型解决设置共同属性的问题

 有个妹子比较懒,改造自己的方法的时候,为了省时省力找到了我,尽量少改代码,实现为对象赋值的功能。这些属性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;
	}
	
	
	
}

  

posted on 2017-05-21 13:40  莫大人  阅读(211)  评论(0编辑  收藏  举报

导航