当前位置: 代码迷 >> Android >> 【Android应用开发】-(21)Android中巧用反射解决程序兼容性有关问题
  详细解决方案

【Android应用开发】-(21)Android中巧用反射解决程序兼容性有关问题

热度:87   发布时间:2016-05-01 15:00:44.0
【Android应用开发】-(21)Android中巧用反射解决程序兼容性问题

    Android的更新速度太快,因为她的开源,所以造就了一批技术公司,一堆的方案,从而各有特色。对于一个想要深入了解系统的开发者来说这是幸运的,但从一个产品角度来看,这是致命的。我们开发应用程序,为了保证程序的兼容性,我们买了很多设备做兼容性测试,但往往不如人意。这里不打算解决此问题,只是唠叨下。本文只是介绍一个简单的技巧来做兼容。

    背景:框架层的某个方法在新版本中添加了一个参数或者少了几个参数,为了程序的兼容性,必须要解决这个问题。否则将会多出很多个版本!这可怎么办呢?办法是有的,使用Java中的反射技术! 这里只写了个简单的演示程序。至于什么是反射技术,反射怎么用,请看这篇博文java反射详解 - Rollen Holt - 博客园 

    很简单,直接上代码

public class Demo {	public void setABC(int id,String name){	}		public void setDEF(int id,String name,String pwd){		System.out.println("id="+id+",name="+name+";pwd="+pwd);	}}

package org.winplus.java;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test {	public static void main(String[] args) {			}		/**	 * 得到类中的所有方法	 */	private static void getAllMethods(){		Class clz = Demo.class;		Method[] method = clz.getDeclaredMethods();		for (Method m : method) {			Class retType = m.getReturnType();			Class[] paramTypes = m.getParameterTypes();			for (int j = 0; j < paramTypes.length; j++) {				if (j > 0)					System.out.print(" , "); 				System.out.print(paramTypes[j].getName());			}		}	}		/**	 * 得到指定的方法,并调用方法	 */	private static void  exeMethod(){		Class clz = Demo.class;		Class[] clzs = new Class[3];		clzs[0] = int.class;		clzs[1] = String.class;		clzs[2] = String.class;		try {			Method mth  = clz.getDeclaredMethod("setDEF", clzs);				mth.invoke(new Demo(), 12,"tang","haha");			System.out.println(mth.getName());		} catch (SecurityException e) {			e.printStackTrace();		} catch (NoSuchMethodException e) {			e.printStackTrace();		} catch (IllegalArgumentException e) {			e.printStackTrace();		} catch (IllegalAccessException e) {			e.printStackTrace();		} catch (InvocationTargetException e) {			e.printStackTrace();		}	}}

原创文章,转载请注明出处:http://blog.csdn.net/tangcheng_ok

  相关解决方案