因此,与我一起工作的组已减少了我们为某些事情键入的代码量。在这种情况下,使用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