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