`
youngmaster
  • 浏览: 58535 次
  • 性别: 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();
	}
}
分享到:
评论

相关推荐

    关于八大智能的黄金关键期.doc

    音乐智能是关于节奏、音调和音乐创作的理解能力。音乐智能在婴儿期就能通过听音乐和唱歌得到培养。音乐活动,如哼唱儿歌、打击乐器等,都能够有效激发孩子的音乐智能。 人际智能涉及到与他人有效沟通和协作的能力。...

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

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

    自我评价的作用.doc

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

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

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

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

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

    2021论语个人学习总结.docx

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

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

    在儒家思想中,内省是提升个人道德的重要途径,强调通过不断的自我审视来发现和改正自己的不足,从而达到更高的道德境界。这种精神在试题中也应当有所体现,促使学生在学习过程中,不断自我反思,勇于承认错误,不断...

    EQEI中文版.pdf

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

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

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

    中学教师资格证考试《教育知识与能力(中学)》题库100题含答案(第848版).docx

    中国传统儒家经典《礼记·中庸》中的“慎独”思想,即强调在无人监督的情况下也要保持内心的自省和自律,是自我教育法的古代表述。在现代教育中,教师应鼓励学生主动学习,通过内省和自我监督来达到道德自我完善的...

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

    通过内省和自省,我们可以不断发现自己身上的不足,从而在自我修养的道路上走得更远。 总之,通过这篇初中语文文摘中的故事,我们能更加深刻地理解到个人修养与行为态度的真谛。在这个故事中,“有人处诵经”和...

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

    它不仅给初中生们传达了知足、坚韧、自省、乐观、勇敢面对挑战以及珍视过程等多重人生智慧,也鼓励着每个读者去深入思考,去提升自身的阅读理解和批判性思维能力。在纷扰复杂的世界里,让我们像几何猫一样,拥有洞察...

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

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

    absolution:“从syn的自由”

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

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

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

    advanced python 中文版

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

    安徽省2015届高考英语二轮复习 高效课时检测试卷20

    通过议论文的形式,它让学生练习如何在英语写作中表达关于个人成长和自我依赖的观点,同时也锻炼了他们的阅读理解、词汇运用和逻辑推理能力。这对于即将到来的高考英语考试而言是至关重要的。 作为课件,这份试卷...

    PYTHON深入学习 XML HTML

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

    2019年高考英语一轮优练题Unit5Music含解析新人教版必修2

    在孤独中进行的思考和内省对个人发展具有不可估量的积极影响。这不仅是对个人精神世界的探索,也是对如何在快节奏生活中寻找自我反思的机会的指导。 时间管理是本单元探讨的另一个重要话题。爱因斯坦曾言,一个人...

    《独白》席慕容.doc

    席慕容在诗中借用“明镜”这一意象,表达了对内心世界的观照和自省。她认为每个人的心中都有一面镜子,时刻反映着我们的所作所为。这面镜子不仅仅是对外界的一种反映,更是一种对自身行为和品质的严格审视。这种内省...

Global site tag (gtag.js) - Google Analytics