论坛首页 Java企业应用论坛

使用反射是否破坏了程序的封装性

浏览 19817 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-09-23  
借着楼主的帖子 问问反射,今天上午我在论坛发了一个反射的提问
问题如下
public class Address { 
private int id;
private String addr;

private Address(int id) {
this.id = id;
}

private Address(String addr) {
this.addr = addr;
}

public static void main(String[] args) throws Throwable {
Class<Address> addClass = Address.class;
// 下面的反射不能成功运行,为什么了????,
// 如果把构造函数改成private Address(Integer id),却可以
// 如果我想private Address(int id)这样也能反射,应该怎么解决
Constructor<Address> addConstructor = addClass
.getDeclaredConstructor(Integer.class);
Address address = addConstructor.newInstance(1);
System.out.println(address.id);

// 此反射可以运行
// Constructor<Address> addConstructor = addClass
// .getDeclaredConstructor(String.class);
// Address address = addConstructor.newInstance("北京");
// System.out.println(address.addr);
}
}
0 请登录后投票
   发表时间:2011-09-23  
pouyang 写道
求问答连接。。。

我提问,这是链接
http://www.iteye.com/problems/72276
0 请登录后投票
   发表时间:2011-09-23  
防君子 不防小人嘛
这个 也无可厚非
0 请登录后投票
   发表时间:2011-09-23  
Wind_ZhongGang 写道

  今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?

 

 

你深入研究过反射吗?没有的话不要乱怀疑...

当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以

0 请登录后投票
   发表时间:2011-09-23  
的确是破坏了的~
0 请登录后投票
   发表时间:2011-09-23  
zhzhenqin 写道
Wind_ZhongGang 写道

  今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?

 

 

你深入研究过反射吗?没有的话不要乱怀疑...

当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以

反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用

0 请登录后投票
   发表时间:2011-09-24  
tag13346 写道
zhzhenqin 写道
Wind_ZhongGang 写道

  今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?

 

 

你深入研究过反射吗?没有的话不要乱怀疑...

当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以

反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用

 

我觉得封装是否是天条没有任何意义,关键是使用的人有没有那份维护的心。你要是想破坏封装性的话,地球人都阻止不了你。
这是一个态度的问题。

0 请登录后投票
   发表时间:2011-09-24  
tag13346 写道
zhzhenqin 写道
Wind_ZhongGang 写道

  今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?

 

 

你深入研究过反射吗?没有的话不要乱怀疑...

当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以

反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用

 

运行时还能把私有改成共有? 第一次听说 ...

这么说, Java的沙箱模型就跟摆设一样了。

0 请登录后投票
   发表时间:2011-09-24  
应用场景问题
0 请登录后投票
   发表时间:2011-09-24  
啥封装性都是处于更好的维护代码
同样解耦也是为了更好的维护代码
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics