0 0

关于JAVA反射的一个问题0

有三个类,Human,Head,Body,请问如何用反射获取Human中的Head中的属性(eye,nose)?

如下:

public class Human {
	private Head head;
	private Body body;
	public Head getHead() {
		return head;
	}
	public void setHead(Head head) {
		this.head = head;
	}
	public Body getBody() {
		return body;
	}
	public void setBody(Body body) {
		this.body = body;
	}
}

 

public class Head {
	private String eye;
	private String nose;
	public String getEye() {
		return eye;
	}
	public void setEye(String eye) {
		this.eye = eye;
	}
	public String getNose() {
		return nose;
	}
	public void setNose(String nose) {
		this.nose = nose;
	}
}

 

public class Body {
	private String arm;
	private String leg;
	public String getArm() {
		return arm;
	}
	public void setArm(String arm) {
		this.arm = arm;
	}
	public String getLeg() {
		return leg;
	}
	public void setLeg(String leg) {
		this.leg = leg;
	}
}

 

 


问题补充:忘记说声谢谢了
2014年5月20日 22:57

3个答案 按时间排序 按投票排序

0 0

采纳的答案

楼上不是完全的反射,因为楼上直接调用了human.getHead()方法取到了Head对象,题主的问题完全使用反射。改造一下如下:


Class<?> humanClazz = human.getClass();
Field headField = humanClazz.getDeclaredField("head");
Class<?> headClazz = headField.getType();
Field eyeField = headClazz.getDeclaredField("eye");
Field noseField = headClazz.getDeclaredField("nose");
eyeField.setAccessible(true);
noseField.setAccessible(true);
headField.setAccessible(true);
Object head = headField.get(human);
System.out.println(eyeField.getName() + " : " + eyeField.get(head));
System.out.println(noseField.getName() + " : " + noseField.get(head));

2014年5月21日 08:38
0 0

楼上两个回复已经可以解决问题了。楼主如果要实现以后正确运用,建议还是从反射的这些API入手,详细了解下,比如

getDeclaredField()
getDeclaredMethods()
getFields()

可以获取到相应的对象的Class的对象之后,遍历一下这些方法的返回值,大概会更清楚些。

2014年5月21日 09:37
0 0

		Head head = new Head();
		head.setEye("eye000");
		head.setNose("nose000");
		Body body = new Body();
		body.setArm("arm000");
		body.setLeg("leg000");
		Human human = new Human();
		human.setHead(head);
		human.setBody(body);
		
		Class<?> humanClazz = human.getClass();
		Field headField = humanClazz.getDeclaredField("head");
		Class<?> headClazz = headField.getType();
		Field eyeField = headClazz.getDeclaredField("eye");
		Field noseField = headClazz.getDeclaredField("nose");
		eyeField.setAccessible(true);
		noseField.setAccessible(true);
		System.out.println(eyeField.getName() + " : " + eyeField.get(human.getHead()));
		System.out.println(noseField.getName() + " : " + noseField.get(human.getHead()));

显示结果为:
eye : eye000
nose : nose000

2014年5月20日 23:50

相关推荐

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    Java反射性能测试分析

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的应用场景下可能成为一个瓶颈。本文将深入...

    Java反射机制总结

    ### Java反射机制总结 ...总之,Java反射机制是Java语言的一个重要特性,它提供了在运行时动态获取类信息和操作类结构的能力。合理使用反射可以提高程序的灵活性和扩展性,但在使用时也需要考虑到其潜在的问题和限制。

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    java反射例子,封装了一个反射帮助类

    Java反射是Java编程语言中的一个重要特性,它允许运行时访问和操作类、接口、字段和方法等信息。在Java中,反射提供了动态类型的能力,使我们可以在程序运行时检查类的信息,创建和调用对象的方法,甚至修改对象的...

    反射实例-JAVA反射机制

    下面通过一个简单的示例来展示Java反射机制的工作流程: ```java import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0])...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java反射,获取所有属性、方法以及List集合类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类...

    java面试题--反射机制

    下面通过一个简单的示例展示如何使用Java反射机制: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionDemo { public ...

    java 反射得到某个方法

    在本文中,我们将深入探讨如何使用Java反射来获取并执行某个特定的方法。 首先,我们需要了解Java反射的基本概念。`java.lang.Class`类是反射的核心,它代表了Java中的每一个类。我们可以通过以下方式获取到一个...

    java反射机制.zip

    java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...

    Java反射机制Demo

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。...

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个机制在处理不确定类型或者需要灵活操作类的场景中非常有用。在这个...

    java反射以及复制一个bean的值到另一个bean中。

    在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。通过反射,我们可以动态地创建对象、访问私有成员、调用私有方法,甚至改变对象的行为。Java反射 API 主要...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    JAVA反射详细讲解

    总结,Java反射是Java语言的一个强大特性,它提供了运行时分析和操作类的能力,极大地拓展了Java的灵活性。然而,使用反射也需要谨慎,合理运用才能发挥其优势,避免潜在的问题。理解并熟练掌握反射,对于提升Java...

    java反射.pdf

    Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用方法、获取类的信息等。 #### 二、如何创建反射类? ...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

Global site tag (gtag.js) - Google Analytics