zoukankan      html  css  js  c++  java
  • 继承,强转,泛型解决设置共同属性的问题

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

      

  • 相关阅读:
    又一道简单的题
    atoi函数的使用(将字符串转换成整型数)
    【贪心】Radar Installation(POJ1328)
    【BFS】鸣人与佐助
    谍报分析
    适配器模式(C++实现)
    策略模式(C++)
    工厂模式(C++实现)
    桥接模式(C++实现)
    关于getMemory函数的几点思考
  • 原文地址:https://www.cnblogs.com/yun965861480/p/6884684.html
Copyright © 2011-2022 走看看