让我们想象以下情况:
我们定义了几个VO类:
abstract class A { // some class variables }
class B extends A { // more specific class variables }
现在,创建接口及其实现的最佳实践是什么?
建议1:
interface X {
A method1();
}
class ImplX implements X {
public A method1() {
return new B();
}
}
// more class implementations of the interface
建议2:
interface X <T extends A> {
T method1();
}
class ImplX implements X<B> {
public B method1() {
return new B();
}
}
// more class implementations of the interface
两种实现都有哪些优缺点?最佳做法是什么?
答案 0 :(得分:0)
有一种更简单的返回B
的方法,不需要使用泛型:
class ImplX implements X {
public B method1() {
return new B();
}
}
您可以使用协变返回类型。
使X
成为泛型的原因是您必须在任何地方使用泛型 。 X<Foo>
,X<Bar>
,X<List<Map<String, Map<String, Integer>>>>
...。即使您不想在意它,您仍然必须使用X<?>
。
除非您真的需要知道此方法将专门返回B
,否则请使其保持非泛型。