Lon*_*man 1 java design-patterns
我有这段代码:
private String objectToString(Object obj){
if (obj instanceof String)
return (String)obj;
if (obj instanceof Struct){
Map<String,?> map = ((Struct)obj).getMembers();
return map.toString();
}
Class c = obj.getClass();
if (c.isArray())
{
//obj. iterate elements and return values;
return obj.toString();//to redi this
}
//this is for any other datatypes
else
return obj.toString();
Run Code Online (Sandbox Code Playgroud)
}
有人可以建议,如果这属于来自GOF.Code的任何设计模式是直截了当的,只是为了澄清它查看传递的参数,并取决于以人类可读形式返回字符串的类型.
您的代码是反模式的明显示例.最干净的方法是简单地覆盖您想要自定义文本表示的每个对象的toString()方法.例如,每次调用System.out.println(someObject)时 - 它会调用此特定对象的toString().
这里有一个文章,解释如何/为什么它是覆盖一个好主意.想一想 - 为什么你必须集中关于不同对象的文本表示的逻辑,这些对象可能没有任何共同点?这就是为什么toString()是Java的Object对象的一部分的确切原因,并且因为java中的每个类都隐式地从Object继承,所以覆盖toString()方法是完全合理的.
覆盖toString()方法还可以访问对象的内部状态,如果您想要进行正确的文本表示,这可能是必需的,这对于您提议的实现是不容易完成的(虽然它当然可以公开)只是为了文本表示,这样做是没有意义的.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |