`
youngmaster
  • 浏览: 58291 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于 自省 | 内省 的理解

阅读更多

反射(reflect) 与 内省|自省(Introspector)

 

二者深层次的关联到底是什么呢?也许其本质俱为反射!

 

package com.youngmaster.Introspector;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.lang.reflect.Method;

public class myBeanIntrospector {
	public myBeanIntrospector() {
		try {
			// 实例化一个Bean
			Student beanObj = new Student();
			// 依据Bean产生一个相关的BeanInfo类
			BeanInfo bInfoObject = Introspector.getBeanInfo(beanObj.getClass(),
					beanObj.getClass().getSuperclass());
			// 定义一个用于显示的字符串
			String output = "";

			// 开始自省

			/*
			 * BeanInfo.getMethodDescriptors()
			 * 用于获取该Bean中的所有允许公开的成员方法,以MethodDescriptor数组的形式返回
			 * 
			 * MethodDescriptor类 用于记载一个成员方法的所有信息 MethodDescriptor.getName()
			 * 获得该方法的方法名字 MethodDescriptor.getMethod() 获得该方法的方法对象(Method类)
			 * 
			 * Method类 记载一个具体的的方法的所有信息 Method.getParameterTypes()
			 * 获得该方法所用到的所有参数,以Class数组的形式返回
			 * 
			 * Class..getName() 获得该类型的名字
			 */
			output = "内省成员方法:\n";
			MethodDescriptor[] mDescArray = bInfoObject.getMethodDescriptors();
			for (int i = 0; i < mDescArray.length; i++) {
				// 获得一个成员方法描述器所代表的方法的名字
				String methodName = mDescArray[i].getName();

				String methodParams = new String();
				// 获得该方法对象
				Method methodObj = mDescArray[i].getMethod();
				// 通过方法对象获得该方法的所有参数,以Class数组的形式返回
				Class[] parameters = methodObj.getParameterTypes();
				if (parameters.length > 0) {
					// 获得参数的类型的名字
					methodParams = parameters[0].getName();
					for (int j = 1; j < parameters.length; j++) {
						methodParams = methodParams + ","
								+ parameters[j].getName();
					}
				}
				output += methodName + "(" + methodParams + ")\n";
			}
			System.out.println(output);

			/*
			 * BeanInfo.getPropertyDescriptors()
			 * 用于获取该Bean中的所有允许公开的成员属性,以PropertyDescriptor数组的形式返回
			 * 
			 * PropertyDescriptor类 用于描述一个成员属性
			 * 
			 * PropertyDescriptor.getName() 获得该属性的名字
			 * 
			 * PropertyDescriptor.getPropertyType() 获得该属性的数据类型,以Class形式给出
			 */
			output = "内省成员属性:\n";
			PropertyDescriptor[] mPropertyArray = bInfoObject
					.getPropertyDescriptors();
			for (int i = 0; i < mPropertyArray.length; i++) {
				String propertyName = mPropertyArray[i].getName();
				Class propertyType = mPropertyArray[i].getPropertyType();
				output += propertyName + " ( " + propertyType.getName()
						+ " )\n";
			}
			System.out.println(output);

			/*
			 * BeanInfo.getEventSetDescriptors()
			 * 用于获取该Bean中的所有允许公开的成员事件,以EventSetDescriptor数组的形式返回
			 * 
			 * EventSetDescriptor类 用于描述一个成员事件
			 * 
			 * EventSetDescriptor.getName() 获得该事件的名字
			 * 
			 * EventSetDescriptor.getListenerType() 获得该事件所依赖的事件监听器,以Class形式给出
			 */
			output = "内省绑定事件:\n";
			EventSetDescriptor[] mEventArray = bInfoObject
					.getEventSetDescriptors();
			for (int i = 0; i < mEventArray.length; i++) {
				String EventName = mEventArray[i].getName();
				Class listenerType = mEventArray[i].getListenerType();
				output += EventName + "(" + listenerType.getName() + ")\n";
			}
			System.out.println(output);
			System.out.println("write by esonghui :)");

		} catch (Exception e) {
			System.out.println("异常:" + e);
		}
	}

	public static void main(String[] args) {
		new myBeanIntrospector();
	}
}
分享到:
评论

相关推荐

    广东省深圳市耀华实验学校2017_2018学年高一语文下学期期末考试试题201807160139

    世”后“批判自省”再“主客体和谐”,这样的哲学性格顺序反映了中华优秀传统文化在个人发展和社会进步上的深刻理解。首先,积极入世强调的是主体人格的实践性和进取心,体现在儒家的“内圣外王”理念中,鼓励人们...

    山西省河津2019_2020学年高二语文10月月考试题.doc

    3. 关于认知意识,文中强调传统哲学的自省和批判精神,如孔子的“内省不疚,夫何忧何惧”,提倡对行为规范、品德学识的自觉自省,以达到自我提升和人格完善的境界。 4. 最后,文章阐述了中国传统哲学中的“和”理念...

    自我评价的作用.doc

    自我评价的过程是自我反思的过程,它可以激发个体的内省能力,让人深入理解自己的思想、情感和行为,推动个人的成长和进步。 其次,自我评价对于自我完善具有积极的推动作用。当个体能够客观公正地评价自己,就能...

    借助本地引导虚拟化技术隐式内省预装的操作系统

    ### 借助本地引导虚拟化技术隐式内省预装的操作系统 #### 摘要及背景 本文介绍了一种新型的虚拟机(VM)基础上的自省方法——Pisces,它能够准确地重现预安装操作系统(OS)在Pisces VM中的执行环境,并提供了OS...

    山西省河津中学2019_2020学年高二语文10月月考试题202001100179

    【标题】和【描述】提及的是山西省河津中学2019-2020学年高二语文的一份月考试题,这份试题主要考察学生的现代文阅读理解能力,包括论述类文本阅读和文学类文本阅读。【标签】表明这是教学资料。 【部分内容】摘录...

    病情观察技巧借鉴.pdf

    观察可分为两类:一是按观察者的活动,包括旁观性观察(非参与性观察)、参与性观察和内省性观察(自省性观察)。旁观性观察保持距离,不干扰病人,而参与性观察则融入病人的生活,更深入地理解他们的行为。内省性...

    初中语文文摘文苑几何猫的人生哲学

    几何猫讨厌睡觉、不喜欢吃鱼、最喜欢发呆,这些特性暗示它更倾向于思考和内省,而非享受物质生活。 【标签】:“资料”这一标签表明这篇文章可能是教育资料,用于教学或阅读理解的练习,旨在启发学生思考和领悟生活...

    2021论语个人学习总结.docx

    这篇个人学习总结主要围绕两则论语名言展开,让我们深入理解其内涵,并探讨它们对我们个人修养和社会生活的影响。 首先,第一则论语是孔子关于“文质彬彬”的教导:“质胜文则野,文胜质则史。文质彬彬,然后君子。...

    初中语文文摘人生有人处诵经

    这个故事可以作为初中语文教学的一个例子,教导学生理解内涵而非表面,以及如何在日常生活中保持谦逊和内省。 在故事中,"有人处诵经"与"无人处诵经"代表了两种生活哲学。前者可能是为了展示自我,追求外在的认可,...

    EQEI中文版.pdf

    嘉纳则将人际智能和内省智能作为情绪智力的重要组成部分,强调理解和响应他人情绪及自我认知的重要性。沙洛维将情绪智力分为五个方面:认识自身的情绪、情绪管理、自我激励、认知他人的情绪以及人际关系管理。 认识...

    大学生职业生涯规划与就业指导 项目二自我探索glq.pptx

    - **定义**:一种常见的自我评估手段,强调通过内省的方式加深自我理解。 - **实践建议**: - 反思自身拥有的资源与优势。 - 思考自己应当感激的事物。 - 规划如何充分利用当前的时间。 - 确定即刻行动的方向。 ...

    《唐太宗论弓矢》古文练习题.pdf

    《唐太宗论弓矢》这篇古文讲述了唐朝第二位皇帝唐太宗李世民的一段故事,从中我们可以深入理解唐太宗的治国理念和人格特质。文章中,唐太宗自述年轻时喜好弓箭,拥有十几把自认为优良的弓箭,但当他请教专业的弓箭...

    absolution:“从syn的自由”

    这个板条箱提供了一个难以理解的令牌树表示形式,用于编写Rust proc宏。 它仍然有些不稳定:可以使用,但是我还没有完全确定我想要的API外观,并可能发布重大更改。 我欢迎各种反馈! 板条箱提供了令牌树表示形式...

    [唐太宗论弓矢阅读答案] 唐太宗论弓矢的翻译.docx

    这篇文章的核心是唐太宗认识到治理国家如同选择良弓,需要深入理解和不断学习。 在文章中,唐太宗自述年轻时酷爱弓箭,收藏了十几把他认为极好的弓,但后来请教弓箭工匠后,才得知这些弓其实都不是优质的材料制成。...

    advanced python 中文版

    关于Pythonic编程,它是一种特定的编程风格,倡导简洁、高效、易于理解的代码。在本书中,作者以实用主义的角度介绍Pythonic编程技巧,包括如何写出符合Python哲学的代码,如何利用Python内建的高级特性,如生成器、...

    PYTHON深入学习 XML HTML

    “自省的威力”指的是Python的内省能力,即程序可以检查自身的行为和结构。这包括检查对象的属性、方法,甚至在运行时动态修改类和对象。例如,使用`dir()`函数可以查看对象的所有属性和方法,`type()`可以检查对象...

Global site tag (gtag.js) - Google Analytics