使用toString()访问隐藏字段时是否存在任何问题

时间:2018-12-24 15:04:26

标签: java android wificonfiguration

我正在尝试创建与SettingsApp相同的应用。为此,我需要与Wi-Fi设置相同的网络,例如无法访问互联网或输入错误的密码。这些信息隐藏在WiFiConfiguration中。

但是我发现使用toString()方法可以读取这些信息。

使用toString()访问这些用户是否很好?

2 个答案:

答案 0 :(得分:2)

通常,这不是一个好的设计决定。解析toString()以提取原本不会用方法公开的信息,这与encapsulation的原理背道而驰。实际上,这可能会变得很脆弱,因为随后的软件发行版经常会更改toString()格式。

话说回来,可能是有时候根本没有其他办法。例如,如果您必须使用无法以任何方式修改的第三方代码,但仍然必须使其起作用。在这种情况下,您可能需要在设计中引入anti-corruption layer。您可能还想尝试使用reflection

答案 1 :(得分:2)

通常:完全没有。

您可以使代码完全依赖于该方法的当前实现。

当然,它可以在现实世界中工作,甚至可以持续更长的时间,但是您始终要冒任何Android更新中断字符串解析的风险。该评论也是正确的。如果方法输出因不同设备而不同,或更可能因不同类型的Wi-Fi连接而不同怎么办?

因此,调用toString()并解析其输出以获取有关对象内部详细信息的信息被认为是不好的做法,这确实是很糟糕的事情!