java反射机制的使用
来源:互联网 发布:企业网络性能需求 编辑:程序博客网 时间:2024/05/22 05:20
一个android项目demo,越简单的项目越不容易出错,这是肯定的。
activity_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" tools:context="${relativePackage}.${activityClass}" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <ImageView android:id="@+id/img1" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
package com.Harris.reflectdemo;import android.app.Activity;import android.os.Bundle;import android.widget.ImageView;public class MainActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.img1);iv.setImageResource(getId());}//声明静态方法,可以直接调用。此外还需要手动写Try Catch循环,不然会报错//亲自试验了一下,先在res下面建一个drawable文件夹,里面放上d1.png。没问题//删除res文件夹,在drawable_hdpi;里面放上d1.png,依旧没问题public static int getId(){Class cl = R.drawable.class;int id = 0;try{//getDecalredField应该就是获取了这个类下面的Object,然后通过getInt(null)获得int类型Id。id = cl.getDeclaredField("d1").getInt(null);}catch(Exception e){e.printStackTrace();}return id;}}
从网上下载了一个项目的时候需要用到反射,现会用再说,今后有什么新的再补充。
重新找到了一个介绍反射的例子http://my.oschina.net/swords/blog/117357
自己尝试着新建一个java项目
import java.lang.reflect.Field;public class Program{public Program() {super();}public Program(String name, int age) {super();this.name = name;this.age = age;}private String name = "sss" ;private int age = 11;//故意设置为private的方法private String getName(String name){return this.name;}public static void main(String[] args ) throws NoSuchFieldException, SecurityException{try {Program program = new Program();Class proClass = program.getClass();Field proField = proClass.getDeclaredField("name");//打印这个变量的名称System.out.println(proField.toString());//获得这个变量的具体值并打印String str = proField.getName();System.out.println(str);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
打印结果是
private java.lang.String Program.name
name
为什么不能打印出sss呢?
还是不能获得变量的具体数值
下面继续改,貌似获得field的引用是没有问题的,但是获得field对应的值只能通过在Program这个类里面添加一个自定义的方法返回age具体数值,
然后经由这个field的引用调用这个方法来获得数值,就是这样。
import java.lang.reflect.Field;public class Program{private String name = "xxx";private int age = 11;public Program() {super();// TODO Auto-generated constructor stub}public Program(String name, int age) {super();this.name = name;this.age = age;}public int getAge(){return age;}public static void main(String[] args) throws NoSuchFieldException, SecurityException{try {Program myprogram = new Program();Class myclass = myprogram.getClass();System.out.println(myclass);Field ageField = myclass.getDeclaredField("age");System.out.println(ageField);ageField.set(myprogram, 22);System.out.println(myprogram.getAge());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
参考文章:
http://www.cnblogs.com/penghongwei/p/3300084.html
http://my.oschina.net/swords/blog/117357
0 0
- java反射机制的使用
- Java反射机制的使用
- java 反射机制的使用
- java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- Java反射机制的使用
- java的反射机制使用
- 使用java反射机制
- java 反射机制使用
- java 的 反射机制的使用列子
- java的反射机制使用漫谈
- java invoke 反射机制的使用
- 浅探JAVA反射机制的使用
- Java反射机制的基本概念与使用
- (浅谈)Java反射机制的使用
- 反射机制的使用
- GIT设置SSH公钥
- 文本框得到焦点后,清空内容,失去焦点,还原成默认值
- shape节点的使用
- AngularJS项目环境搭建
- opengl es 的EGL使用
- java反射机制的使用
- 如何解决blur事件和click事件冲突问题?
- js金额计算精度缺失解决方案(只此一家,错过后悔)
- Android实战简易教程-第五十五枪(窃听风云之电话录音上传)
- ZOJ 3787 Access System
- RMI 相关知识
- C#枚举 方法应用示例
- LeapFTP 显示服务器端文件名乱码问题处理
- 用libjson-glib处理json数据