我有一个要实例化的Java类。
PackageGenerator gen = [
fileName: "file.xml",
platform: "windows",
version: "1.0"]
println ReflectionToStringBuilder.toString(gen);
生产:
PackageGenerator_groovyProxy[fileName=<null>, platform=<null>, version=<null>]
但是如果我用
.with
方式编写它:PackageGenerator gen = new PackageGenerator()
gen.with {
fileName = "file.xml"
platform = "windows"
version = "1.0"
}
println ReflectionToStringBuilder.toString(gen);
产生:
PackageGenerator[fileName="file.xml", platform="windows", version="1.0"]
是什么导致使用Groovy代理类而不是实际类?
最佳答案
如果无法将原始对象分配给所需的类型,则在创建_groovyProxy
实现时会添加Proxy
后缀。我相信这里发生的是
PackageGenerator gen = [
fileName: "file.xml",
platform: "windows",
version: "1.0"]
是相同的
PackageGenerator gen = [
fileName: "file.xml",
platform: "windows",
version: "1.0"] as PackageGenerator
并且由于
Map
无法转换为PackageGenerator
,因此会生成代理。您可以使用地图构造函数轻松解决此问题
PackageGenerator gen = new PackageGenerator(
fileName: "file.xml",
platform: "windows",
version: "1.0")
哪种实现与您在第二个示例中编写的非常接近