2013-08-28 103 views
1

我是新來的Java(從ActionScript 3.0背景的),我試圖港口一些ActionScript代碼到Java(as3signals到jsignal)如何獲得類引用泛型類

我試圖讓通用類的類名稱,以便將其傳遞給超級調用。

在ActionScript 3.0,這將是

super(Vector.<TileVO>,Boolean); 

上面一段代碼會通過類引用的構造TileVO和布爾的矢量。

在Java這似乎 不工作,我知道我做錯了什麼:

super(ASVector.class<TileVO>,boolean.class); 

把它寫短的,你怎麼弄的TileVO對象組成的ASVector類的類參考?

謝謝!

後來編輯:

我只是意識到代碼沒有正確顯示(視爲HTML)

發佈一些源代碼:

public Signal(Class<?>... params) { 
     this.params = params; 
    } 

我需要傳遞給信號類引用通過構造函數。

new Signal(int.class)例如工作

我需要知道我怎麼能傳遞給信號的構造方法的類這種形式的對象:

ASVector<TileVO> 

我試圖ASVector.class<TileVO>,它似乎並不上班!

+2

你似乎有一個很好的問題,但我不能真正理解你。我不知道「通用」是什麼意思,以及傳遞它的目的是什麼。而不是描述你想要發生什麼,你可以發佈有問題的代碼(即使它不工作)? – chrylis

+0

謝謝你chrylis!我相信現在好多了,你可以理解我需要什麼。我忘了把代碼塊和編輯器對待作爲無法識別的html標籤。 – Oliver

+0

好的,*爲什麼*你需要傳遞類變量?它是爲了什麼?可能有一種方法可以在Java中完成你的任務,但是這個習慣用法可能與它在ActionScript中的完全不同。 – chrylis

回答

1

在編譯時,在你的情況下的泛型類型參數<TileVO>進行「擦除」;編譯器將它們的一些用法轉換爲隱式轉換,但是有關它們的信息在字節碼中被丟棄。這意味着對於您的API,ASVector<TileVO>沒有特定類型,運行時類型僅爲ASVector,因此您傳入ASVector.class。如果運行時間處理程序需要知道ASVector的內容爲TileVO對象,則還需要在可變參數中的某個點傳入TileVO.class作爲參數。

+0

我明白了,謝謝你的回答! – Oliver

1

不幸的是,無法訪問ASVector<TileVO>作爲Java中的類。在Java中,ASVectorTileVO沒有實際的類實現。查看Java泛型wiki

Java泛型不同於C++模板。無論使用的參數化類型的數量如何,Java泛型只生成一個泛型類或函數的編譯版本。

可以做更具體的來解決,雖然這個問題的東西:

public static class ASVector_TileVO extends ASVector<TileVO> 
{ 
    public ASVector_TileVO(ASVector<TileVO> objects) 
    { 
    super(objects); 
    } 
}; 

現在ASVector_TileVO是一個基類,可與ASVector_TileVO.class訪問。

+0

謝謝你的信息,這是有幫助的! – Oliver