后台(32)——内省Introspector

简介: 探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制Android多分...

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明


内省(Introspector)简介

内省Introspector是一种特殊的反射技术,常用于操作JavaBean。


字段和属性以及JavaBean

先来看我们经常写的一种类:

/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
package cn.com;

public class Girl {

    private String name;
    private int age;
    private int bust;
    private int waist;
    private int hip;

    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;
    }
    public int getBust() {
        return bust;
    }
    public void setBust(int bust) {
        this.bust = bust;
    }
    public int getWaist() {
        return waist;
    }
    public void setWaist(int waist) {
        this.waist = waist;
    }
    public int getHip() {
        return hip;
    }
    public void setHip(int hip) {
        this.hip = hip;
    }

}

在该类中,我们定义了几个字段并且为它们生成了对应的getXXX()和setXXX()。在很多时候我们喜欢把name,age,waist这些东西叫属性。其实,更加规范的的说法应该是:把有getXXX()或者setXXX()的变量叫做属性,把没有getXXX()或者setXXX()的变量称作字段。

很多时候,我们会看到这样的类:里面只有属性及其对应的get和set方法,这样的类也被称为JavaBean,比如此处的Girl类。


内省Introspector的使用方式

在此介绍与内省Introspector相关的操作

    /**
     * 本文作者:谷哥的小弟
     * 博客地址:http://blog.csdn.net/lfdfhl
     */
    private static void testPropertyDescriptor1() throws IntrospectionException{
        BeanInfo beanInfo = Introspector.getBeanInfo(Girl.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.println(propertyDescriptor.getName());
        }
    }

在此,我们利用属性描述器PropertyDescriptor获取Bean的属性,结果如下:

age
bust
class
hip
name
waist

嗯哼,发现了么?我们不但获取到了Gril类的五个属性还获取到了它的父类Object的属性class。

继续来看下面的例子:

    /**
     * 本文作者:谷哥的小弟
     * 博客地址:http://blog.csdn.net/lfdfhl
     */
    private static void testPropertyDescriptor2() throws Exception{
        Girl girl = new Girl();
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Girl.class);
        Method setter = propertyDescriptor.getWriteMethod();
        setter.invoke(girl, 18);
        Method getter = propertyDescriptor.getReadMethod();
        Object age = getter.invoke(girl, null);
        System.out.println("age="+age);
    }

输出结果:

age=18

代码解析如下:

  • 得到与属性对应的属性描述器PropertyDescriptor,请参见代码第7行
  • 得到该属性的set方法后为对象赋值,请参见代码第8—9行
  • 得到该属性的get方法后取出属性值,请参见代码第10—11行

Beanutils

BeanUtils是Apache提供的操作JavaBean的工具,它使用简单,操作方便。如有需要,可至其官方网站详细了解;在此不再赘述。

相关文章
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(NLP)的进展与挑战
【6月更文挑战第13天】自然语言处理(NLP)在深度学习推动下取得显著进展,包括循环神经网络、词嵌入技术及预训练模型(如BERT、GPT)的应用,突破了文本分类、问答系统等任务。然而,数据稀疏性、语言复杂性和模型可解释性仍是挑战。未来,NLP有望实现更高效、准确和可解释的技术,需关注数据隐私和伦理问题。
439 10
|
11月前
|
数据采集 自然语言处理 开发工具
通义灵码在 PyCharm 中的强大助力(下)
通义灵码在PyCharm中的优势包括提高开发效率、提升代码质量和易用性,并且能够不断学习和改进。然而,它也存在依赖网络、准确性有待提高和局限性等问题。未来,通义灵码有望支持更多编程语言,提高准确性和可靠性,与其他工具集成,并提升智能化程度。总体而言,通义灵码为Python开发者带来了显著的便利和潜力。
通义灵码在 PyCharm 中的强大助力(下)
|
8月前
|
人工智能 安全 API
容器化AI模型的安全防护实战:代码示例与最佳实践
本文基于前文探讨的容器化AI模型安全威胁,通过代码示例展示如何在实际项目中实现多层次的安全防护措施。以一个基于TensorFlow的图像分类模型为例,介绍了输入验证、模型加密、API认证和日志记录的具体实现方法,并结合最佳实践,如使用安全容器镜像、限制权限、网络隔离等,帮助构建更安全的AI服务。
|
8月前
|
人工智能 IDE 程序员
AI程序员入场!揭秘直播吧研发效能大提升的秘密武器
对于直播吧而言,这不仅是工具升级,更是研发模式向「人与AI协同型」跃迁的战略选择。
|
设计模式 算法 Java
谈谈springboot的策略模式
【4月更文挑战第14天】Spring Boot 中的策略模式主要通过接口和多个实现类来实现,这种设计允许在运行时动态选择算法或行为的具体实现。这是一种非常灵活的设计模式,可以帮助解耦组件之间的关系,使得系统更加灵活并易于扩展和维护。
272 2
|
JavaScript
【vue】vue2 获取本地IP地址
【vue】vue2 获取本地IP地址
454 1
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
生成式人工智能入门指南
生成式 AI 是人工智能的一个子领域,专注于通过学习现有数据的模式创建新内容或生成解决方案。它是一种鼓励 AI 系统利用对数据结构的理解自主生成新颖、类似于人类的输出的方法。这可以采用图像、文本、音乐或甚至是代码的形式呈现。
350 3
|
11月前
|
边缘计算 自动驾驶 5G
5G网络架构解析:从核心网到边缘计算
【10月更文挑战第24天】
625 10
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的注意力机制:原理、应用与未来趋势
探索深度学习中的注意力机制:原理、应用与未来趋势
430 0
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存