黑马程序员技术交流社区
标题:
关于JavaBean 的一个小问题,问题在注释中。谢谢。
[打印本页]
作者:
一碗小米周
时间:
2013-12-12 20:41
标题:
关于JavaBean 的一个小问题,问题在注释中。谢谢。
本帖最后由 一碗小米周 于 2013-12-13 20:27 编辑
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
//获取Point类中的属性值,并设置。
public class PointTest {
public static void main(String[] args) throws Exception{
Point pt = new Point(3, 5);
String propertyName="x";
//获取x值。 如果想获取x的值,为什么不直接用pt.getX()呢?这样不是更方便吗?为什么要用下面这种方式呢?请教各位。
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt.getClass());
Method getMethod = pd.getReadMethod();
Object retVal = getMethod.invoke(pt);
复制代码
public class Point {
private int x;
private int y;
public Point(int x,int y){
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
复制代码
作者:
風諾
时间:
2013-12-12 21:42
一开始的时候,我也存在这样的想法,现在慢慢有了一些理解:
我个人感觉之所以用这种方式,和反射是一样的。在能更改源码的情况下,你希望这里可以实现几个不同.class文件的对象中的同名的方法,你只要创建不同类对象就可以了;但是遇到不能更改源码但是又需要根据不同情况使用不同的JavaBean,这种方法就行不通了。
但是可以采用配置文件的形式。将类名、属性名等信息配置进去,在源程序中预留接口对象。根据多态的性质,只要是实现了该接口的对象,都可以通过更改配置文件名称的方式,动态地加载进程序,就有了一定的扩展性,也一定程度上避免了更改源程序可能引起错误的情况。
我的理解就是这样,具体应用还不太多,更深层次的还没有想到。
作者:
半夜雨半夜雨
时间:
2013-12-12 23:25
我是这么想的,并非所有的代码都是开源的,这种情况下如果你不会反编译,那么你只有通过字节码文件,获取其中的属性,使用属性描述 PropertyDescriptor,通过字节码文件对象得到其中的属性 propertyName。
getReadMethod();这个获取属性的方法,Object retVal = getMethod.invoke(pt); 这句话意思是,使用invoke实现字节码对象中封装的属性方法,在未知返回值类型的情况下将类型定义为Object
作者:
史超
时间:
2013-12-13 17:59
这应该用到的是反射机制。就是说,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2