我的界面中有这个方法:
public String getValue();
字符串仅用于此处的示例,我不想返回字符串。
我希望将该方法放在将返回int,chars或bools(取决于类)的类中。例如,我有一个实现我的界面的Animal类,并且有这个方法。我希望它在动物中调用此方法时返回一个int。我有另一个具有此方法的类人员,并且当在Person上调用此方法时,我希望它返回一个char。
public class Animal implements myInterface {
@Override
public int getValue() {
return 5;
}
}
public class Person implements myInterface {
@Override
public char getValue() {
return 'c';
}
}
我知道我必须用泛型来做这件事。但我究竟该怎么做呢?
如果我将接口中的String替换为泛型类型,例如:
public <T> T getValue();
然后它说我不能从int(或char)转换为T。
我该怎么办?感谢。
答案 0 :(得分:5)
这样做的正确方法是使用通用接口:
public interface MyInterface<T> {
public T getValue();
}
public class Animal implements MyInterface<Integer> {
@Override
public Integer getValue() {
return 5;
}
}
然而,这真的像一个X / Y问题;更不用说它非常低效,装箱和拆箱所有这些原语。
你想要达到什么目的?你的目标是什么?
答案 1 :(得分:1)
实际上
public <T> T getValue();
可以被
覆盖 public Character getValue()
这很奇怪......对于一些backward-comparability mumbo jumbo来说。不要这样做。
通常,我们说返回类型可以是协变的,即我们可以在重写方法中返回一个子类型。由于char
是int
的{{3}},我们可能会认为这应该有效
public int getValue();
// overridden by
public char getValue()
然而,java subtype如果返回类型是原始的,那么它必须是相同的,没有协方差。