类[] - 这是什么意思?

时间:2011-03-04 21:26:32

标签: java reflection

我正在查看在http://www.ibm.com/developerworks/library/j-dyn0603/

上找到的教程

特别是有一节给出了以下示例:

Class[] types = new Class[] { String.class, String.class };
Constructor cons = TwoString.class.getConstructor(types);
Object[] args = new Object[] { "a", "b" };
TwoString ts = (TwoString)cons.newInstance(args);

我并不完全遵循Class []所代表的内容。我读它的方式,这就是'一个叫做类型的Class对象数组'。我对新语句中使用的语法有些不熟悉 - 新的Class [] {String.class,String.class}如何工作?

如果有人可以帮我解决这个问题,我会很感激。

7 个答案:

答案 0 :(得分:3)

是的,字面含义正是您所认为的

Class[] types = new Class[] { String.class, String.class };是一行中的声明和初始化。它表示创建一个包含Class类型对象的数组,并使用两个类型为Class的对象初始化它,即String.class和String.class。

类似的例子是

int[] nums = new int[]{1,2,3};

float[] decimals = new float[]{1.2, 3.1, 5.2}

答案 1 :(得分:1)

它是一个共享超类型Class的对象数组。

在Java中,一切都是Object。这意味着如果您希望获得类类型的代码内感知,则需要创建一个Object来封装类的详细信息。 Java将此Object称为Class

请注意大小写并注意,由于ClassObject,您可以在课堂上调用所有Object方法,例如x.getClass()x.wait(),和x.hashcode()

Class[] items = { String.class, Integer.class };

表示创建一个名为items的数组,其中包含Class个对象。使用表示Object类和String类的Integer来初始化数组。

由于Class个对象代表类类型,通常这两个对象在非正式演讲中可以互换使用。

答案 2 :(得分:1)

这是Class

类型的数组

new Class[] {...}

创建其内容列在其中的Class类型的数组。

一般

类型 []表示一个“数组......”就像你想的那样。

事实证明这里的类型是Class,它在Java中表示正在运行的类或接口。

可能你不应该先了解反射等高级功能,而不必先了解基础知识。

答案 3 :(得分:1)

Class是描述java类(或接口)的ObjectClass[]是这些对象的数组。

语法<ClassName>.class(例如String.class)返回特定java类(或接口)的Class

可以通过一些语法创建新数组。 new Class[i]创建一个长度为Class的新i数组,并填充默认值(空引用)。 new Class[]{a, b, c}创建一个包含给定元素Classab的新c数组。它的长度是3,因为给出了3个元素。

答案 4 :(得分:0)

  1. Class实际上是一个名为uhmm .. Class的类。

    类Class的实例表示正在运行的Java应用程序中的类和接口。

  2. new Class[]有效。它初始化一个Class引用数组。但是,与通常的对象数组一样,引用为空。

  3. Class没有公共构造函数。所以你不能说new Class()

答案 5 :(得分:0)

Class是一个表示...类和相关元数据的java类。所以Class[]Class个对象的数组。

java中的每个类都有一个名为Class类的Class的静态成员变量,这里你要做的是

  1. 创建一个包含两个的Class [] 每个成员都是其成员 类型Class,特别是Class 代表java.lang.String
  2. 通过反思查找 引用中的构造函数 类TwoString需要两个 java.lang.String objects =&gt; TwoString(String,String)
  3. 创建要提供的对象数组 值为“a”的构造函数 和“b”
  4. 最后你要创建一个实例 通过调用。的两个字符串ts 你在(b)和。中查找的构造函数 你在(c)
  5. 中初始化的args

    这相当于:

    TwoString ts = new TwoString("a","b");
    

    但你发布的方式是使用Reflection / Introspection。

答案 6 :(得分:0)

我不确定这是否是您正在寻找的,但示例中的Class[]正在模仿该TwoString类中的构造函数。对我来说,如果他们使用两种不同的类型会更清楚。所以如果TwoString类看起来像这样:

public class TwoString {

    private String m_s1;
    private Integer m_s2;
    public TwoString(String s1, Integer s2) {
        m_s1 = s1;
        m_s2 = s2;
    }


}

此类名称将不再存在,但我认为这很容易修复。代码示例的其余部分将变为:

Class[] types = new Class[] { String.class, Integer.class };
Constructor cons = TwoString.class.getConstructor(types);
Object[] args = new Object[] { "a", 1 };
TwoString ts = (TwoString)cons.newInstance(args);

所以类数组是设置要使用的构造函数。逐行的步骤是:

  1. 类数组设置要使用的构造函数。
  2. 然后你找到了构造函数。
  3. 您设置了传递给构造函数的值。
  4. 然后调用构造函数创建实例。