看一些开源的项目中
很多地方都以Class对象作为方法的参数
如:
void f(Class c)
然后在f中用c来生成类的对象再使用
这样做有什么好处呢?
比直接传一个普通的对象相比有什么好处?
不知表达清楚没有
谢谢!

解决方案 »

  1.   

    和普通的类型一样呀
    Class 也是Object呀
      

  2.   

    也可以这样说
    假设有类ClassA
    定义如下两个方法
    void f1(ClassA a)
    {
      a.doSomething();
    }
    void f2(Class c)
    {
      首先用c生成一个c对应的类型的对象,假设为a
      a.doSomething();
    }
    调用端如下:
    ClassA a = new ClassA();
    f1(a);
    f2(a.class);这样,f2比f1有哪些好处?
      

  3.   

    sorry
    应该是
    f2(ClassA.class);
      

  4.   

    f2(ClassA.class);里面这个ClassA.class是什么东西,ClassA能点出class????
      

  5.   

    to qiang029(风) 
    难道ClassA不能点出class????希望大虾指出为什么很多代码中需要使用上述手法?谢谢啊
      

  6.   

    ClassA.class
    等价于:
    static Class $class0 =Class.forName("ClassA");ClassA.$class0
      

  7.   

    编译器帮你生成了很多代码
    使用javap 反编译看的很清楚
      

  8.   

    ClassA a = new ClassA();
    f1(a);
    f2(ClassA.class);f2的好处在哪里?
      

  9.   

    详细讲解一下javap????????????????????最好有个例子...........
      

  10.   

    to codefire(小不懂):
    谢谢你的回答
    不过有个地方不明白:“引用的对象的对象一族”是什么意思?
      

  11.   

    这是为了泛型的目的.
    对于void f1(ClassA a),限定死了输入参数只能是ClassA类型的对象
    对于void f2(Class c),你可以传入任何对象的Class,也就是说,这么写表示f2处理的对象可以是所有的Object.
    至于为什么不写成void f3(Object o),f2的写法,可以更容易的得到c的Class相关信息,比如是否是一个interface,implements了哪几个interface,继承了哪几个类,有哪些field,有哪些method,属于那个package等等