接口上的显式类与泛型

时间:2019-06-14 13:46:22

标签: java generics

让我们想象以下情况:

我们定义了几个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

两种实现都有哪些优缺点?最佳做法是什么?

1 个答案:

答案 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,否则请使其保持非泛型。