gpt4 book ai didi

java 美元符号 com.package.Foo.$$$.Bar 问题

转载 作者:行者123 更新时间:2023-12-02 11:51:43 25 4
gpt4 key购买 nike

我正在执行一个 Web 服务调用,它使用名为 Foo 的模型类进行响应。 Foo 没有扩展任何其他类。

Foo data = call(); 

我可以正常访问所有数据字段。 String str = data.getData();

但是如果我这样做 System.out.println(data.toString());我得到以下输出:com.package.Foo.$$$.Bar@2938ac9a

我怀疑 Web 框架正在对响应进行一些反射魔法,并用代理类包装它。由于 Bar 在应用程序级别扩展了 Foo,我无法注意到任何事情,但仍然可以访问我需要的所有数据。但是...

问题:

当我尝试序列化 Foo 数据时;结果我得到了很多意想不到的数据和字段。

我想知道是否有人可以解释一下 $$$ 在 java 中的含义以及如何将 Bar 对象转换回 Foo?

最佳答案

这通常是一些库用来隐藏其实现的包装器,并带有自动生成的代码。使用 Hibernate 时可以捕获另一个实例(略有不同),它依赖于 com.sun.proxy 包中的 Proxy 类:

...
at com.sun.proxy.$Proxy38.getSingleResult(Unknown Source) // Who would name its class 'Proxy38' ?
...

参见this other SO answer了解更多详情。

您必须编写自己的包装器才能成功:

public Foo barToFoo(Bar data)    {
Foo foo = new Foo();
foo.name = data.getName();
...
...
return foo;
}

这是您最安全的选择之一。您可以控制数据,仍然可以访问它,您可以按照想要的方式将其转换回 Foo(而不是一些棘手的转换或隐藏实现),并且您可以处理任何您喜欢的情况(null 数据、异常等)。

编辑

It should happen automatically. Is there any solution [...] ?

不幸的是,似乎没有。 There is an overloading solution in C++, but not in Java .

关于java 美元符号 com.package.Foo.$$$.Bar 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com