簡體   English   中英

類[] - 這是什么意思?

[英]Class[] - What does it mean?

我正在查看一個教程: 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}如何工作?

如果有人可以幫我解決這個問題,我將不勝感激。

是的,字面意思正是你的想法

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}

它是一個共享超類型Class的Objects數組。

在Java中,一切都是Object 這意味着如果您希望獲得類類型的代碼內感知,則需要創建一個可以封裝類的詳細信息的Object Java將此Object稱為Class

注意大小寫並注意,因為Class是一個Object ,所以可以調用類上的所有Object方法,如x.getClass()x.wait()x.hashcode()

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

表示創建一個名為items的數組,其中包含Class對象。 使用表示String類和Integer類的Object初始化數組。

由於Class對象代表類類型,因此通常兩者在非正式語音中可互換使用。

那是Class類型的數組

new Class[] {...}

創建類型為Class的數組,其內容列在里面。

一般來說

類型 []表示,就像你想的那樣“......的數組”。

事實證明這里的類型是Class ,它在Java中表示正在運行的類或接口。

可能你不應該先了解反射等高級功能,而不必先了解基礎知識。

Class是一個描述java類(或接口)的Object Class[]是這些對象的數組。

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

可以通過一些語法創建新數組。 new Class[i]創建一個新的Class數組,其長度為i並填充默認值(null引用)。 new Class[]{a, b, c}創建的新數組Class包含給定元素abc 它的長度是3,因為給出了3個元素。

  1. Class實際上是一個名為uhmm ..的類。

    類Class的實例表示正在運行的Java應用程序中的類和接口。

  2. new Class[]有效。 它初始化一個Class引用數組。 但是,與通常的對象數組一樣,引用為空。

  3. Class Class沒有公共構造函數。 所以你不能說new Class()

Class是一個java類,表示一個類和相關的元數據。 所以Class[]Class對象的數組。

java中的每個類都有一個名為Class類的Class的靜態成員變量,這里你要做的是

  1. 創建一個包含兩個成員的Class [],每個成員都是Class類型的對象,特別是表示java.lang.String的Class
  2. 通過反射查找類TwoString中的構造函數的引用,它接受兩個java.lang.String對象=> TwoString(String,String)
  3. 使用值“a”和“b”創建一個對象數組以提供給構造函數
  4. 最后你通過調用你在(b)中查找的構造函數和你在(c)中初始化的args來創建一個TwoString ts的實例

這相當於:

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

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

我不確定這是否是您正在尋找的,但示例中的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. 然后調用構造函數來創建實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM