• Android反射出一个类中的其他类对象并调用其对应方法


    MainActivity如下:

    package cn.testreflect;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import android.os.Bundle;
    import android.app.Activity;
    /**
     * Demo描述:
     * 在一个类中有另外一个类的对象
     * 比如此处的Worker类中有一个Student类的对象:
     * private Student mStudent;
     * 
     * 目前需求:
     * 我们需要反射出Worker类中的 private Student mStudent
     * 并且使用该对象调用其对应的方法
     */
    public class MainActivity extends Activity {
    	private Field mStudentField;
    	private Object mStudentObject;
    	private Class mStudentClass;
    	private Method mStudentShowMethod;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		init();
    	}
        private void init(){
        	try {
        		
        		String workerClassName="cn.testreflect.Worker";
            	Class workerClass=Class.forName(workerClassName);
            	
            	//得到Worker类中的mStudent字段
            	mStudentField=workerClass.getDeclaredField("mStudent");
            	mStudentField.setAccessible(true);
            	//实例化mStudent对象
            	mStudentObject=mStudentField.get(new Worker());
            	//得到mStudent对象对应类的Class
            	mStudentClass = Class.forName(mStudentObject.getClass().getName());
            	//反射出该Class类中的show()方法
            	mStudentShowMethod = mStudentClass.getDeclaredMethod("show");
    			//取消访问私有方法的合法性检查 
            	mStudentShowMethod.setAccessible(true);
    			//调用show()方法
            	mStudentShowMethod.invoke(mStudentObject);        	
            	
    		} catch (Exception e) {
    			System.out.println(e.toString());
    		}
        
        }
    
    }
    


     

    Worker如下:

    package cn.testreflect;
    
    public class Worker {
        private int age;
        private String name;
        private Student mStudent;
        public Worker() {
    		super();
    		mStudent=new Student("I am a student", 9527);
    		System.out.println("---> public Worker(){ }");
    	}
    	public Worker(int age, String name) {
    		super();
    		this.age = age;
    		this.name = name;
    		mStudent=new Student("I am a student", 9527);
    		System.out.println("---> public Worker(int age, String name){ }");
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	@Override
    	public String toString() {
    		return "Worker [age=" + age + ", name=" + name + "]";
    	}
    	
    	public void printMessage(String name,int age,int salary){
    		System.out.println("name="+name+",age="+age+",salary="+salary);
    	}
        
    }
    


     

    Student如下:

    package cn.testreflect;
    
    public class Student {
    	private String name;
    	private int age;
    	public Student() {
    		super();
    	}
    	public Student(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}
    	
    	public void show(){
    		System.out.println("-----> call method show()");
    	}
    	
    
    }
    


    main.xml如下:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Android中Java反射技术的使用" 
            android:layout_centerInParent="true"/>
    
    </RelativeLayout>


     

  • 相关阅读:
    user表中存在多条相同user不同host用户信息时MySQL该匹配哪条记录登录?
    linux下MySQL源码安装
    教你如何让数据库支持emoji表情符存储
    (原创)暴力破解西电校园网密码
    python爬虫:爬取慕课网视频
    Html+CSS 学习第二天
    html学习第一天
    python开发ftp服务器第一天(pyftpdlib)
    开启博客的第一天
    Redis快速入门
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3395168.html
Copyright © 2020-2023  润新知