Java GWT.create()是否总是在浏览器内存中创建新对象?

Java GWT.create()是否总是在浏览器内存中创建新对象?,java,gwt,new-operator,Java,Gwt,New Operator,假设我这样做: VeryLargeObject o1 = GWT.create(VeryLargeObject.class(); VeryLargeObject o2 = GWT.create(VeryLargeObject.class(); ... VeryLargeObject o1000 = GWT.create(VeryLargeObject.class(); 其中,VeryLargeObject是一个GWT资源接口,它扩展了com.google.GWT.i18n.client.Mes

假设我这样做:

VeryLargeObject o1 = GWT.create(VeryLargeObject.class();
VeryLargeObject o2 = GWT.create(VeryLargeObject.class();
...
VeryLargeObject o1000 = GWT.create(VeryLargeObject.class();
其中,
VeryLargeObject
是一个GWT资源接口,它扩展了com.google.GWT.i18n.client.Messages

此代码是否会在浏览器中创建1000个新的对象实例?或者GWT是否足够聪明,能够检测到
VeryLargeObject
是不可变的,并且每次都重复使用它的1个实例

编辑:我在中发现了这一点,但我仍然不清楚其行为:

使用GWT.create(class)来“实例化”一个扩展消息的接口,该接口返回一个自动生成的子类的实例,该子类是使用基于区域设置选择的消息模板实现的


根据GWT Javadoc,create()方法将返回一个新实例,因此我怀疑它是同一个对象

是,
GWT.create()
每次都将返回一个新实例但是一个好的生成器将使它能够在编译代码中进行优化

GWT编译器首先要做的事情之一是收紧类型(重写代码以使用可能的最特定类;在这种情况下,消息接口的所有用法都将替换为生成的实现),然后使方法成为静态的(除非需要动态分派,即实际使用多态性)。
对于I18N消息接口,因为生成的类没有状态,其构造函数也没有副作用,这意味着可以优化实例,并且只有静态方法保留在代码中(当它们以后没有内联时)。

更为“复杂”的情况(例如客户端捆绑包、CSS资源)实际上会使用“静态”,因此实例本身可以再次优化,最终不管您创建了1000个实例还是只共享了一个实例。

您可以打印o1.toString()、o2.toString()等,这样您就可以检查是否打印了相同的值。如果是,则它们是相同的对象。@如果是,则在开发模式下,新对象的哈希代码不同。但这并不能保证在生产模式下,这些对象不会引用下面的同一对象。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,只有链接的答案可能会变得无效。我确实发布了“答案的基本部分”:“返回:新实例,必须将其转换为请求的类”。这不是一篇很厚的文章