`
geelong
  • 浏览: 117257 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

反射 getter setter 属性操作 数组操作

阅读更多

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Array ;

public class ChangeArrayDemo{

public static void main(String args[]) throws Exception{

int temp[] = {1,2,3} ;// 声明一整型数组

int newTemp[] = (int []) arrayInc(temp,5) ; // 重新开辟空间5

print(newTemp) ;

System.out.println("\n-------------------------") ;

String t[] = {"lxh","mldn","mldnjava"} ;

String nt[] = (String [])arrayInc(t,8) ;

print(nt) ;

}

public static Object arrayInc(Object obj,int len){

Class<?> c = obj.getClass() ;

Class<?> arr = c.getComponentType() ; // 得到数组的

Object newO = Array.newInstance(arr,len) ; // 开辟新的大小

int co = Array.getLength(obj) ;

System.arraycopy(obj,0,newO,0,co) ; // 拷贝内容

return newO ;

}

public static void print(Object obj){ // 数组输出

Class<?> c = obj.getClass() ;

if(!c.isArray()){ // 判断是否是数组

return;

}

Class<?> arr = c.getComponentType() ;

System.out.println(arr.getName()+"数组的长度是:" + Array.getLength(obj)) ; // 输出数组信息

for(int i=0;i<Array.getLength(obj);i++){

System.out.print(Array.get(obj,i) + "、") ; // 通过Array输出

}

}

};

 

 

 

 

 

 

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Array ;

public class ClassArrayDemo{

public static void main(String args[]) throws Exception{

int temp[] = {1,2,3} ;// 声明一整型数组

Class<?> c = temp.getClass().getComponentType() ; // 取得数组的Class对象

System.out.println("类型:" + c.getName()) ; // 取得数组类型名称

System.out.println("长度:" + Array.getLength(temp)) ;

System.out.println("第一个内容:" + Array.get(temp,0)) ;

Array.set(temp,0,6) ;

System.out.println("第一个内容:" + Array.get(temp,0)) ;

}

};

 

 

 

 

 

 

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Field ;

public class InvokeFieldDemo{

public static void main(String args[]) throws Exception{

Class<?> c1 = null ;

Object obj = null ;

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象

obj = c1.newInstance() ;

Field nameField = null ;

Field ageField = null ;

nameField = c1.getDeclaredField("name") ; // 取得name属性

ageField = c1.getDeclaredField("age") ; // 取得name属性

nameField.setAccessible(true) ; // 此属性对外部可见

ageField.setAccessible(true) ; // 此属性对外部可见

nameField.set(obj,"李兴华") ; // 设置name属性内容

ageField.set(obj,30) ; // 设置age属性内容

System.out.println("姓名:" + nameField.get(obj)) ;

System.out.println("年龄:" + ageField.get(obj)) ;

}

};

 

 

 

 

 

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Method ;

public class InvokeSayChinaDemo{

public static void main(String args[]){

Class<?> c1 = null ;

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象

}catch(Exception e){}

try{

Method  met = c1.getMethod("sayChina") ; // 找到sayChina()方法

met.invoke(c1.newInstance()) ; // 调用方法

}catch(Exception e){

e.printStackTrace() ;

}

}

};

 

 

 

 

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Method ;

public class InvokeSayHelloDemo{

public static void main(String args[]){

Class<?> c1 = null ;

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象

}catch(Exception e){}

try{

Method  met = c1.getMethod("sayHello",String.class,int.class) ; // 找到sayChina()方法

String rv = null ;

rv = (String)met.invoke(c1.newInstance(),"李兴华",30) ; // 调用方法

System.out.println(rv) ;

}catch(Exception e){

e.printStackTrace() ;

}

}

};

 

 

 

 

package org.lxh.demo15.invokedemo ;

import java.lang.reflect.Method ;

public class InvokeSetGetDemo{

public static void main(String args[]){

Class<?> c1 = null ;

Object obj = null ;

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象

}catch(Exception e){}

try{

obj = c1.newInstance() ;

}catch(Exception e){}

setter(obj,"name","李兴华",String.class) ; // 调用setter方法

setter(obj,"age",30,int.class) ; // 调用setter方法

System.out.print("姓名:") ;

getter(obj,"name") ;

System.out.print("年龄:") ;

getter(obj,"age");

}

/**

Object obj:要操作的对象

String att:要操作的属性

Object value:要设置的属性内容

Class<?> type:要设置的属性类型

*/

public static void setter(Object obj,String att,Object value,Class<?> type){

try{

Method met = obj.getClass().getMethod("set"+initStr(att),type) ; // 得到setter方法

met.invoke(obj,value) ; // 设置setter的内容

}catch(Exception e){

e.printStackTrace() ;

}

}

public static void getter(Object obj,String att){

try{

Method met = obj.getClass().getMethod("get"+initStr(att)) ; // 得到setter方法

System.out.println(met.invoke(obj)) ; // 调用getter取得内容

}catch(Exception e){

e.printStackTrace() ;

}

}

public static String initStr(String old){ // 将单词的首字母大写

String str = old.substring(0,1).toUpperCase() + old.substring(1) ;

return str ;

}

};

 

 

 

 

package org.lxh.demo15 ;

interface China{ // 定义China接口

public static final String NATIONAL = "China" ; // 定义全局常量

public static final String AUTHOR = "李兴华" ; // 定义全局常量

public void sayChina() ; // 无参的,没有返回值的方法

public String sayHello(String name,int age) ; // 定义有两个参数的方法,并返回内容

}

public class Person implements China{

private String name ;

private int age ;

public Person(){ // 无参构造

}

public Person(String name){

this.name = name ; // 设置name属性

}

public Person(String name,int age){

this(name) ;

this.age = age ;

}

public void sayChina(){ // 覆写方法

System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;

}

public String sayHello(String name,int age){

return name + ",你好!我今年:" + age + "岁了!" ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

};

 

 

 

 

分享到:
评论

相关推荐

    实现了一个PHP5的getter/setter基类的代码

    PHP5 中 getter/setter 基类的实现 PHP5 中的 getter/setter 基类是一种常用的设计...PHP5 中的 getter/setter 基类可以使用魔术方法、数组和反射机制来实现,且可以使用抽象类来实现基类,以便于其他类继承和扩展。

    getter and setter tester-开源

    "getter和setter测试器"是一个开源项目,它简化了对这些方法的单元测试过程,使得开发者可以更高效地验证类的内部状态是否正确地通过getter和setter进行操作。 这个测试器的工作原理是利用反射API,动态地调用类的...

    Java反射类中属性方法

    - 数据库持久化框架:例如Hibernate,通过反射调用对象的getter和setter方法来读写数据库记录。 - AOP(面向切面编程):动态代理实现切面的插入。 - 运行时检查类结构:例如在单元测试中验证类的属性和方法。 总结...

    java反射机制工具类

    4. 处理数组:反射提供API来创建和操作数组,包括获取数组长度、遍历数组元素等。 5. 执行注解处理:反射可以用于检测类、方法或字段上的注解,并根据注解执行相应的逻辑。 `BeanHelper.java`可能是一个工具类,...

    c#课件 c#资料 C# j经典部分 精华部分 类,接口,继承 文件操作 操作符重载 代理 属性 放射 特征 使用线程 异常处理 函数重载 集合 数组

    5. **属性**:属性是C#中封装数据的一种方式,提供了访问类中字段的安全途径,可以通过getter和setter来控制对数据的读写。 6. **反射**:反射允许程序在运行时检查自身的信息,例如类、接口、属性、方法等,并能...

    java反射机制.pdf

    而`ReflectTester`类则演示了如何利用反射复制一个对象的所有属性,假设这些属性都有对应的getter和setter方法。 在使用反射时,需要注意性能和安全问题。因为反射操作通常比常规的Java代码运行慢,而且它允许对类...

    C#中使用反射遍历一个对象属性及值的小技巧

    要注意的是,反射只能访问具有公有getter和setter的属性。如果属性只有私有getter或setter,或者完全不公开,`GetProperties()`将不会返回这些属性。因此,确保在类的设计中考虑到这一点,以确保反射能够正确地访问...

    android 使用反射机制操作数据库 插入 查询

    这个类将包含表的列名作为成员变量,并提供getter和setter方法。反射机制将基于这些成员变量和方法来构建SQL语句。 为了插入数据,我们首先需要获取`User`类的Class对象,然后通过反射获取每个字段的名称和值。我们...

    java基于反射得到对象属性值的方法

    这些属性都有对应的getter和setter方法,这是Java Bean的标准规范。为了获取这些属性的值,我们将使用反射。 1. **获取对象的Class对象**: 首先,你需要获取到对象的`Class`实例。这可以通过`Object.getClass()`...

    java反射机制文档

    首先,获取输入对象的类,然后遍历其所有字段,通过反射找到对应的 getter 和 setter 方法,实现属性的复制。 反射在实际开发中有很多应用场景,比如: 1. **动态代理**:Java 动态代理通常基于反射实现,允许在...

    关于操作反射的部分代码

    - 反射工厂(如Hibernate):在ORM框架如Hibernate中,反射用于实例化持久化类,以及调用setter和getter方法映射数据库字段和对象属性。 6. 开发模式: - DAO模式:数据访问对象模式,将数据库操作与业务逻辑分离...

    C#的反射

    5. 访问属性:PropertyInfo对象的GetSetMethod方法可以获取到getter或setter方法,然后使用Invoke方法进行访问。例如,`propertyInfo.SetValue(obj, value)`修改obj的propertyInfo表示的属性值。 总之,C#的反射为...

    Java语言的反射机制

    注意,此方法仅适用于遵循JavaBean规范的对象,即每个属性都有对应的公共getter和setter方法。 #### 总结 Java的反射机制极大地增强了其灵活性和扩展性,尤其是在处理元数据、构建框架和插件系统时非常有用。然而...

    Java-Reflection-Tutorial.pdf

    - 反射可以自动找到类中的getter和setter方法,并调用它们来获取或设置对象的属性。 6. **静态元素** - 反射也能处理类的静态字段和静态方法。 7. **数组与集合** - 反射可以创建和操作数组,包括多维数组。 -...

    BeanUtil Jar包

    在Java编程中,BeanUtil是一个非常重要的工具包,尤其在处理对象的属性操作时,它扮演着不可或缺的角色。BeanUtil源自著名的开源组织Apache,是其 Commons BeanUtils 模块的一部分,旨在简化JavaBeans的使用和操作,...

    C#反射技术的简单操作(读取和设置类的属性)

    这些属性都是无参的getter和setter,方便我们通过反射进行读写操作: ```csharp public class MyClass { public int one { get; set; } public int two { set; get; } public int five { set; get; } public ...

    VB.NET 反射 示例Demo(项目用)

    - 访问属性:使用PropertyInfo对象的`GetGetMethod()`和`GetSetMethod()`获取getter和setter,然后调用`Invoke()`。 ```vbnet Dim myProp As PropertyInfo = myType.GetProperty("MyProperty") Dim propValue As...

    JAVA-提高反射效率

    如果需要频繁访问某个字段,考虑使用getter/setter方法或提供公共访问器,而非反射。 7. **谨慎使用AccessibleObject#setAccessible(true)**:这个方法可以绕过Java安全检查,但也会带来额外的性能成本。只有在绝对...

    iOS KVC实现原理

    4. **集合操作**:对于数组或集合类型的属性,KVC支持操作子集,例如,`keyPath:@"array[index]"`可以访问数组中的某个元素。 5. **动态属性**:如果以上所有尝试都失败,KVC会尝试动态创建实例变量或方法来处理属性...

Global site tag (gtag.js) - Google Analytics