2014-02-21 135 views
0

最近在開發swing應用程序時,有人告訴我使用(ComponentClassName) Beans.instantiate(MyClass.class.getClassLoader(), ComponentClassName.class.getName())來創建組件對象而不是使用「new」。我想知道正確的方法。Java swing組件實例化

+0

你爲什麼要那樣做?沒有意義。使用新的。 –

+0

@JB Nizet-感謝您的回答。順便說一下,有人告訴我,上述方法的運行速度會更快,但我對此持懷疑態度。這就是我問這個問題的原因。 – DpkTheJavaCoder

+1

實際上它會變慢。代碼使用反射來調用新的ComponentClassName()。反射調用比直接調用要慢,不是類型安全,時間更長,可讀性更差,並且最終完成同樣的事情。 –

回答

1

如果要實例化的類型是動態選擇的,則可以使用Beans.instantiate()。通常,新的關鍵字工作得很好,而且我總是在Swing應用程序中使用它。

1

我認爲正確的做法將是使用新的關鍵字,畢竟,這是它的作用。你使用Beans的方式似乎有點被強制,因爲你知道你想實例化的類的類型。其次,因爲這是一個swing應用程序,所以很可能你正在使用默認的swing類(可能會擴展其中的一部分)。這種方法的另一個問題是你必須有一個沒有參數的構造函數。 Class.forName()可用於與上述代碼相同的內容,但如果您不想在運行時動態創建類,請使用new關鍵字。