急!
可以用反射的方法做么/?清知道的指点一下!
呵呵

解决方案 »

  1.   

    不可以,但是愿意不是上面几位所说的因为Class类不是java.lang.reflect.AccessibleObject的子类,那么如果一个类定义为其他类的私有成员,那么他就无法被反射访问。如果是Constructor, Field, Method,他们都是java.lang.reflect.AccessibleObject的子类,那么尽管他们是private成员,也可以通过setAccessiable(true);来访问。
      

  2.   

    不可以~  要不然还要private 干什么
      

  3.   

    up一下,再问一声,使用class.forname()是不是可以在jvm里找到这个class然后再去使用?(已经知道其生成的classname)
      

  4.   

    可以在父类提供一个公共的get方法,子类使用super.getXXX的方法,不知道这个方法可不可以。
      

  5.   

    使用class.forname()是不是可以在jvm里找到这个class然后再去使用?(
    ----------
    测试成功:
    public class OuterClass {
    private class PrivateClass {
    public String field;
    }
    }public class Test {
    public static void main(String []args) {
    try { 
    Class clazz=Class.forName("OuterClass$PrivateClass");
    System.out.println(clazz.getDeclaredFields()[0].getName());
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
      

  6.   

    谁说不可以?
    看以下代码:
    /**
     * 这是接口
     * */
    public interface TestInterface {
    public void doPrint();
    }
      

  7.   

    /**
     * 这是父类
     * */
    public class Father {

    public TestInterface getFathersPrivat(){
    return new FathersPrivate();
    }

    public Father(){

    }
    /**
     * 这是夫类中的private类
     * */
    class FathersPrivate implements TestInterface{
    public void doPrint(){
    System.out.println("我爱的人不爱我,唉…………");
    }
    }
    }
      

  8.   

    /**
     * 这是子类
     * */
    public class Children extends Father{
    private TestInterface mytest = super.getFathersPrivat();//这是调用夫类中的private类

    public Children(){
    this.mytest.doPrint();//结果是:"我爱的人不爱我,唉…………"

    }

    public static void main(String[] src){
    new Children();//运行了看结果
    }
    }
      

  9.   

    不可以,private只能的权限只限制在本类中.
      

  10.   

    再问一下通过clazz=Class.forName("IProxy");后怎么使用clazz的一些方法?比如生成实例时候怎么给他赋参数或者调用它的方法?谢谢
      

  11.   

    to jFresH_MaN(Contributing to Eclipse)  我测试的时候怎么发现java.lang.ClassNotFoundException: OuterClass$PrivateClass
      

  12.   

    yinwenjie(java入门中) 你的例子是子类调用父类的内部类么,你这种调用就是最普通的调用方法,真服了你了
      

  13.   

    Qunshower(行者) 你可能忘了把包路径指给他了
      

  14.   

    用forname是可以返回这个类的Class,但是如何生成实例,这是实例又如何转型?生成实例还有可能,转型嘛,就不知道怎么去做了.
      

  15.   

    我知道用junit可以,别的不清楚。
      

  16.   

    newInstance肯定是不行的,肯定要用reflection取出构造函数,然后还要生成outer class的一个实例,才有可能生成一个实例出来.
      

  17.   

    TO:yangbc(土豆块) 
    我才真的服了你了,FathersPrivate是Father的private class(你在FathersPrivate前面加private 我的代码照样可以运行,不行你可以下载运行),因为一个显而易见的原因,FathersPrivate是不能被Father的子类Children调用的,所以我们不能使用一般的类调用。这是我们应该想到接口,由于private class FathersPrivate是可以实现接口的,于是我们可以通过向上转型来运行private class FathersPrivate 中的方法,这其实是简单工厂模式的一种变形。而且我觉得这和反射没有一点联系,也不用去反射。
    我以上贴的代码是可以运行的,在另一个public class中运行结果为:我爱的人不爱我,唉…………大家可以看看,这是private class FathersPrivate 的方法结果(我忘了在FathersPrivate 前面加private ,大家可以加上,运行是一样可以的,再顺便说一句,如果代码没有测试过、或是测试出错了,我不会对自己那么有自信,毕竟我不是**的,贴代码出来拿给大家骂!)。
      

  18.   

    行不行你动动手再说,如果是static内部类,你看instance行不行
      

  19.   


    yinwenjie(java入门中)
    我没说你这种方式不能调用到父类子类中的内容,可你这种方式还用得着说么,什么内容不能通过公共接口访问还有简单工厂又叫静态工厂 再有,如果不用接口,你该怎么做呢
      

  20.   

    行不行你动动手再说,如果是static内部类,你看instance行不行.
    --------------------------------------
    呵呵,static的可以不代表所有都可以啊.再说,没有默认构造函数怎么办?默认构造函数不是public又怎么办?
      

  21.   

    使用class.forname()是不是可以在jvm里找到这个class然后再去使用?(
    ----------
    测试成功:
    public class OuterClass {
    private class PrivateClass {
    public String field;
    }
    }public class Test {
    public static void main(String []args) {
    try {
    Class clazz=Class.forName("OuterClass$PrivateClass");
    System.out.println(clazz.getDeclaredFields()[0].getName());
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    --------
    还是不大明白,就算知道了private class的方法你怎么调用呢?
    也是个不小的问题呢!
      

  22.   

    既然被申明成private类了, 而且没有接口,那么就是类的设计着有意隐藏这个类, 恐怕你要考虑改变你的思路
      

  23.   


     回复人: jFresH_MaN(Contributing to Eclipse) ( ) 信誉:214  
    的方法是可以,但是,不能使用反射的方式去使用这个类,比如创建对象,访问方法等.建议如果有必要  如jFresH_MaN说的 setAccessible(true);来处理,但这个有可能会引发安全异常(记不太清名字了)
      

  24.   

    try { 
    clazz=Class.forName("org.mozilla.javascript.tools.debugger.Dim$DimIProxy");

    Method withContext = clazz.getDeclaredMethod("withContext",new Class[] { });
    Field actionUrl = clazz.getDeclaredField("url");
    Field actionText = clazz.getDeclaredField("text");

    System.out.println(" test 1:"+withContext.toString());
    Constructor DConStruc = clazz.getDeclaredConstructor(new Class[] {Dim.class,int.class });
    Object[] args = new Object[] { DebugMain.dim, new Integer(IPROXY_EVAL_SCRIPT)} ;
    System.out.println(" test 2:"+DConStruc.toString());
    Object action = DConStruc.newInstance(args);
    actionUrl.set(action,url);
    actionText.set(action,text);
    withContext.invoke(action,new Object[]{});
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    然后代码中的DimIProxy是Dim的private class。actionUrl、actionText是DimIProxy内部的参数,withContext是其一个函数,DConStruc 是其构造函数。多谢各位的关注。关于static class的问题暂时没有涉及,下次做过实验再贴出来。