Topic: 私有内部类的访问 |
Print this page |
1.私有内部类的访问 | Copy to clipboard |
Posted by: Jove Posted on: 2004-03-24 16:00 下面的内部类Bar,他的foobar方法应该是没有办法在外部调用 001 class Foo{ 002 private static class Bar{ 003 public void foobar(){ 004 System.out.println("foo bar"); 005 } 006 } 007 } 但是,这样就可以 001 public class TestInnerClass { 002 public static void main(String[] args) throws Exception{ 003 Class clazz=new Foo().run().getClass(); 004 Object obj=clazz.newInstance(); 005 clazz.getDeclaredMethod("foobar",new Class[0]).invoke(obj,new Object[0]); 006 } 007 } 008 class Foo{ 009 public Object run(){ 010 return new Bar(); 011 } 012 private static class Bar{ 013 public void foobar(){ 014 System.out.println("foo bar"); 015 } 016 } 017 } 结论: 编程时要注意不要留下这样的漏洞 |
2.Re:私有内部类的访问 [Re: Jove] | Copy to clipboard |
Posted by: herbert8 Posted on: 2004-03-25 22:09 所以,在Java中不要在方法中返回对象,这是个值得注意的问题! |
3.Re:私有内部类的访问 [Re: herbert8] | Copy to clipboard |
Posted by: Jove Posted on: 2004-03-25 22:14 这个也未免太严格了吧.. 不说大部分设计模式因此不能用, 就算平时稍微OO的东西,如果不许方法返回对象,估计也挺难的.. |
4.Re:私有内部类的访问 [Re: Jove] | Copy to clipboard |
Posted by: rostone Posted on: 2004-03-27 21:11 在什么情况下 ,非用内部类不可了? |
5.Re:私有内部类的访问 [Re: Jove] | Copy to clipboard |
Posted by: azg Posted on: 2004-03-31 14:27 这样破坏了封装性 |
6.Re:私有内部类的访问 [Re: Jove] | Copy to clipboard |
Posted by: bwpc Posted on: 2004-04-01 16:10 其实还是不可以访问的,只是编译的时候可以通过,当运行时要进行权限检查的,只是你这种方法把错误延迟到运行时,只要把那个private标识符改成public,在包内就可以随便调用了 public class TestInnerClass { public static void main(String[] args) throws Exception{ /* Class clazz=new Foo().run().getClass(); Object obj=clazz.newInstance(); clazz.getDeclaredMethod("foobar",new Class[0]).invoke(obj,new Object[0]); */ Foo.Bar bo=new Foo.Bar(); bo.foobar(); } } class Foo{ /* public Object run(){ return new Bar(); } */ public(注意这里) static class Bar{ public void foobar(){ System.out.println("foo bar"); } } } |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |