【发布时间】:2016-03-20 01:23:27
【问题描述】:
在对象转换方面,以下两种方法的首选方法是什么?
使用 asX() 方法进行对象转换
public class Foo {
int foo;
public Bar asBar() {
return new Bar(foo);
}
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
}
使用构造函数进行对象转换
public class Foo {
int foo;
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
public Bar(Foo foo) {
this.bar = foo.foo;
}
}
与另一种方法相比,我不确定这两种方法的优点(在可维护性、可扩展性等方面)。既定标准是什么?
我接受 Paul Boddington 在 cmets 中指出的问题相当广泛,但希望在此问题结束之前进行一些有用的讨论。
【问题讨论】:
-
您应该将转换的责任放在不同的对象中。如果您还想将
Foo转换为Bar以外的其他类型怎么办?你最终会在你的类中得到一堆转换方法。不仅如此,如果你以后决定添加其他转换方法,就会违反O/C原则。 -
除了目前建议的 3 种方法外,您还可以使用
static方法进行转换。我觉得这个问题实在是太笼统了,没有正确答案。 -
@VinceEmigh 通过引入一个仅用于对象之间转换的类不会使命名空间变得混乱。对我来说,将此类转换方法放在正在转换为/从的任何一个类中是有意义的。
-
一点也不。这就像说
FileReader和FileWriter使命名空间混乱,它们的行为应该直接放在File类中。它遵守单一职责原则。话又说回来,这真的完全取决于您的应用程序的要求。 -
@SamTebbs33,看看这个 SE 问题:stackoverflow.com/questions/34280716/…
标签: java coding-style standards conventions