Java Reflection(六):Getters and Setters

原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)
使用Java反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,使用这个功能同样可以获取指定类的getters和setters,你不能直接寻找getters和setters,你需要检查一个类所有的方法来判断哪个方法是getters和setters。

首先让我们来规定一下getters和setters的特性:

Getter

Getter方法的名字以get开头,没有方法参数,返回一个值。

Setter

Setter方法的名字以set开头,有一个方法参数。

setters方法有可能会有返回值也有可能没有,一些Setter方法返回void,一些用来设置值,有一些对象的setter方法在方法链中被调用(译者注:这类的setter方法必须要有返回值),因此你不应该妄自假设setter方法的返回值,一切应该视情况而定。

下面是一个获取getter方法和setter方法的例子:

</pre>
<pre class="codeBox">public static void printGettersSetters(Class aClass){
  Method[] methods = aClass.getMethods();

  for(Method method : methods){
    if(isGetter(method)) System.out.println("getter: " + method);
    if(isSetter(method)) System.out.println("setter: " + method);
  }
}

public static boolean isGetter(Method method){
  if(!method.getName().startsWith("get"))      return false;
  if(method.getParameterTypes().length != 0)   return false;
  if(void.class.equals(method.getReturnType()) return false;
  return true;
}

public static boolean isSetter(Method method){
  if(!method.getName().startsWith("set")) return false;
  if(method.getParameterTypes().length != 1) return false;
  return true;
}</pre>
<pre>
时间: 2024-09-20 10:58:39

Java Reflection(六):Getters and Setters的相关文章

Java Reflection API简介

Java Reflection API提供对JVM中的类,接口和对象的深入洞察.开发者通常使用API来完成以下的任务,这解释了为什么总是使用开发工具,例如debugger和Integrated Development Environments (IDEs): · 决定一个对象的类. · 获得关于一个类的modifiers, fields, methods, constructors, etc的信息. · 获得关于一个接口的常量和方法声明. · 创建一个类的instance,这个类的名字直到运行时

Java Reflection(九):泛型

内容索引运用泛型反射的经验法则泛型方法返回类型泛型方法参数类型泛型变量类型 我常常在一些文章以及论坛中读到说Java泛型信息在编译期被擦除(erased)所以你无法在运行期获得有关泛型的信息.其实这种说法并不完全正确的,在一些情况下是可以在运行期获取到泛型的信息.这些情况其实覆盖了一些我们需要泛型信息的需求.在本节中我们会演示一下这些情况. 运用泛型反射的经验法则 下面是两个典型的使用泛型的场景: 1.声明一个需要被参数化(parameterizable)的类/接口. 2.使用一个参数化类. 当

JavaScript之Getters和Setters 平台支持等详细介绍_javascript技巧

来自John Resig早年的文章,大致翻译了一下,以作备忘. 令人高兴的是,我想我终于可以说,"现在,JavaScript的Getters和Setters使用非常广泛,它和每个JavaScript开发者的切身利益息息相关".靠,我为了说这句话已经等了很久了. 首先,我们先来快速了解什么是Getters和Setters,以及它们为什么很有用.然后,我们来看看现在都有哪些平台支持Gettets和Setters. Getters和Setters Getters和Setters使你可以快速获

利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询

动态|视图|组合查询     Reflection 是 Java 程序开发语言的特征之一,它允许运行中的程序对自身进行访问,并能直接操作程序的内部属性.     Hibernate是一个面向Java环境的对象/关系数据库映射工具,基本上,每个表或者视图在hibernate里面都可以对应一个类,在此处,我们通过充分的利用这个类,来实现动态组合查询. 首先我们一起来看看这个函数的源代码:     /**     * 组合查询     * @param object 包含查询条件的对象     * @

Java Reflection(十二):动态类加载与重载

原文地址作者: Jakob Jenkov 译者:叶文海(yewenhai@gmail.com) 内容索引类加载器类加载体系类加载动态类加载动态类重载自定义类重载类加载/重载示例 Java允许你在运行期动态加载和重载类,但是这个功能并没有像人们希望的那么简单直接.这篇文章将阐述在Java中如何加载以及重载类. 你可能会质疑为什么Java动态类加载特性是Java反射机制的一部分而不是Java核心平台的一部分.不管怎样,这篇文章被放到了Java反射系列里面而且也没有更好的系列来包含它了. 类加载器 所

Java Reflection(十):数组

原文地址作者: Jakob Jenkov 译者:叶文海(yewenhai@gmail.com) 内容索引java.lang.reflect.Array创建一个数组访问一个数组获取数组的Class对象获取数组的成员类型 利用反射机制来处理数组会有点棘手.尤其是当你想要获得一个数组的Class对象,比如int[]等等.本节会讨论通过反射机制创建数组和如何获取数组的Class对象. 注意:在阅读Eyal Lupu的博客文章"Two Side Notes About Arrays and Reflect

JAVA Reflection(反射机制)

Java 反射机制 反射机制简介 反射机制应用示例 简单的Ioc实现 代理模式 Java动态代理 简单的Aop实现 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言. 尽管在这样得定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关的机制:反射机制 (Reflection). 什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和

java 反射机制系列(一) 初识Java Reflection

Java 反射机制是指Java程序可以在执行期载入,探知,使用编译期间完全未知的classes.这句话可能有点难以理解,我们可以通过一个例子来看.在Java程序中我们经常会用到这样一条语句来创建一个对象.Date date = new Date();在这条语句中date的类型(Java.util.Date)在编译时 已经确定.那么,有没有办法使我们把对象类型的确定时间由编译转到运行,答案是肯定的.这就是Java反射机制所提供的便利.而且它不单单可以生成对象还可以获取Field,对Field设值,

java笔记六:线程间的协调

昨天重新学习了java多线程的使用,多线程的难点就在线程之间的协调.在<操作系统>一课中,我们学习了进程,其实多线程和多进程一样,都会涉及到多个进程或者线程对某一资源共享访问的问题,当多个线程都需要修改这个资源的时候就会出现线程安全问题. 比如说在银行开个账户会有一个存折和一张卡,如果某一天同一时间丈夫拿着存折去 柜台取钱,而妻子拿着银行卡去ATM取钱.当丈夫查询余额里面有3000元,正准备取2000元,这时候妻子也到ATM里面查询也有3000,也取 2000元.其实银行不可能让我们这么做,如