在this video from Google IO 2009中,演示者很快就会说方法的签名应该返回具体的类型,而不是接口。
根据我在视频中听到的,这与GWT Java- to -Javascript编译器有关。
发布于 2011-05-19 21:45:07
正如您所说的,这与gwt编译器有关。编辑:然而,正如Daniel在下面的评论中指出的那样,这通常不适用于GWT编译器,只有在使用GWT-rpc.gwt-rpc.gwt-时才适用。
如果你声明List而不是ArrayList作为返回类型,gwt编译器将在编译后的代码中包含完整的列表层次结构(即所有实现List的类型)。如果使用ArrayList,编译器将只需要包括ArrayList层次结构(即实现ArrayList的所有类型--通常就是ArrayList本身)。使用接口而不是具体的类,您将在编译时间和生成的代码大小(以及每个用户在运行应用程序时必须下载的代码量)方面付出代价。
您还询问了原因:如果使用接口(而不是具体的类),编译器在编译时不知道将使用这些接口的哪些实现。因此,它包含了所有可能的实现。
关于你的最后一个问题:所有的方法都可以声明为返回接口(这就是你想要的,对吧?)然而,上述处罚适用。
顺便说一句:据我所知,这个问题并不局限于方法。它适用于所有类型声明:变量、参数。无论何时使用接口声明某些东西,编译器都会包含完整的子接口和实现类的层次结构。(因此,很明显,如果您声明自己的接口只有一个或两个实现类,那么您不会招致很大的损失。这就是我在GWT中使用接口的方式。)
简而言之:尽可能使用具体的类。
(小建议:如果你在参考视频时给出时间戳,会有所帮助。)
发布于 2013-06-19 12:35:28
在Google IO 2011 - High-performance GWT上展示了这一点和其他性能技巧。
在大约7分钟的时候,演讲者说到了“RPC类型爆炸”:
出于某种原因,我以为GWT编译器会再次优化它,但似乎我错了。
https://stackoverflow.com/questions/6059211
复制相似问题