Java:有没有办法自动转换返回值?

Cyr*_* N. 0 java inheritance types

我有两节课:

public abstract class Arguments {
    public List execute() {
        // do some stuff and return a list
    }
}

// and a child :
public class ItemArguments {
    public List<Item> execute() {
        return super.execute();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,ItemArguments中的execute方法有点无用,但如果没有它,我必须将所有调用转换为Arguments中的execute方法.

有没有办法删除ItemArguments中的execute方法,并避免在进行调用的地方进行强制转换?

谢谢你的帮助!

pto*_*mli 10

泛型

public abstract class Arguments<T> {
  public List<T> execute() {
    // some stuff
    return new ArrayList<T>();
  }
}

public class ItemArguments extends Arguments<Item> {

}
Run Code Online (Sandbox Code Playgroud)

除非有其他原因,否则您甚至不需要子类

public class Arguments<T> {
  public List<T> execute() {
    // blah
  }
}

Arguments<Item> o1 = new Arguments<Item>();
List<Item> o2 = o1.execute();
Run Code Online (Sandbox Code Playgroud)

在T上调用方法并不是那么简单.T由编译器擦除,因此在运行时不可用.一个易于理解的解决方法是在实例化Arguments时传入类

public class Foo {
  public static void something() { ... }
}

public class Arguments<T extends Foo> {
  private Class<? extends Foo> foo;
  public Arguments(Class<? extends Foo> foo) {
    this.foo = foo;
  }
  public List<T> execute() {
    foo.something();

  }
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法,但这绝对是可以理解的,而不是模式大师:)