因此,與我一起工作的組已減少了我們爲某些事情鍵入的代碼量。在這種情況下,使用DisplayTag庫顯示列表的Spring網頁。它的做法是使用泛型擴展Controller
對象的類,然後爲每個應該使用的頁面創建一個子類。在Java中使用類型擦除
此控制器顯示SystemErrorReport
,並將類型定義爲SystemErrorReportCommand
。
public class SystemErrorReportController extends
GenericSearchAndSelectController<SystemErrorReportCommand> {
的問題是,SystemErrorReportCommand
,傳遞作爲一種類型,都需要有其自身的手動聲明在其構造,像這樣:
public SystemErrorReportCommand()
{
super(SystemErrorReport.class);
}
命令對象以後傳遞的東西,需要知道它的顯式類型。沒有在某處手動指定它,它將返回爲GenericCommand
,這是我們的另一個類,因爲SystemErrorReportCommand
位在編譯時間後會丟失。
我對此並不感到激動,因爲它似乎是我們可以進一步自動化以減少開發人員錯誤的東西。有沒有一種更優雅的方式來做到這一點,或者我堅持這種做法是因爲類型擦除?
讓我看一下這個週一。我們已經使用了相當多的思考,我可能需要更具體地處理我的問題,但不要在沒有我面前的例子的情況下進行口誤。 – 2009-10-03 15:23:44
好的,檢查。 這裏的問題是,有這樣的: 類Foo; - 和 - 類巴茲擴展酒吧; - 和 - 類Zab延伸酒吧; 當一些調用foo 與巴茲(酒吧的子類),所有我能得到的回覆是酒吧,不是巴茲;我失去了子類,只能取回顯式類型。 這是否有意義? –
2009-10-05 20:29:10
是的,不幸的是,這是被刪除的信息。在運行時,Foo類(Foo.class)只有1個實例。所以你只能得到「聲明」泛型類型而不是「實例」泛型類型。這就是「通用化」討論(http://gafter.blogspot.com/2006/11/reified-generics-for-java.html)。不幸的是,這不會成爲Java 7的一部分。 – vdr 2009-10-07 08:33:31