实现参数化接口

时间:2014-06-03 19:29:53

标签: java generics

鉴于此界面:

import com.google.common.base.Optional;

public interface Foo<S extends Bar> {
  Optional<S> get();    
}

然后我使用Foo实现了界面:

public class Baz implements Foo {
   public Optional<Bippie> get { ... }; // Bippie extends Bar
{

是否有必要在class Baz上添加参数?为什么或为什么不呢?

1 个答案:

答案 0 :(得分:3)

保持Baz不变,实现原始Foo接口在技术上是合法的。 Java会将所有泛型视为不存在,并且代码将被编译。

然而,使用原始类型通常是一个坏主意,并且很容易正确实现通用接口,所以就这样做。您不必在类Baz上提供泛型类型参数:

public class Baz implements Foo<Bippie> {
    public Optional<Bippie> get() {

但如果您愿意,可以:

public class Baz<S extends Bar> implements Foo<S> {
    public Optional<S> get() {

或者您可以使用Bippie进一步缩小范围:

public class Baz<S extends Bippie> implements Foo<S> {
    public Optional<S> get() {