2012-12-06 22 views
2

假設我通過使用Class.forName("Foo")動態加載類來獲得Class對象。 Foo在這種情況下是抽象的,所以我不能打電話給newInstance()就可以了。 (How)是否可以聲明Foo的具體子類?以Java爲子類動態加載的類

回答

1

你聲明它不是抽象的,例如

class Bar extends Foo { 
    // implement methods are required. 
} 

總之,只是因爲你加載的類動態並不意味着規則的改變;)

富不可用在編譯時

如果你不」在編譯時沒有Foo,你仍然需要有一個這個類的子類,它是具體創建它的。要做到這一點,你有兩個選擇。

  • 找到一個具體的類並創建它。您可以使用Reflections庫來查找這樣的類。
  • 生成代碼並使用Compiler API或BeanShell進行編譯。
  • 使用ObjectWeb的ASM爲子類生成字節碼。

我懷疑第一個選項是你需要的,因爲除非爲你提供了一個子類,否則你仍然需要爲抽象方法生成代碼。

+0

'Foo'在編譯時不可用,所以我不能編寫上面的代碼。編譯器抱怨:「找不到符號:class Foo」。 – badweather

+0

@badweather,這只是一個例子。你必須首先聲明'Foo'類。 –

+0

@badweather我已根據您的評論添加了詳細信息。 –