是否可以为方法分配不同的返回类型

时间:2013-10-18 05:49:35

标签: java generics

我的想法是有一个验证器接口,它有方法getRealValue()。返回值取决于字段,可以是StringIntegerLong值。

我的机会是:

  1. 我可以将返回类型指定为Object,并在每次调用此方法后使用强制转换。 (RuntimeError如果错误的施法发生了。)

  2. 我可以在实例化时使用泛型返回类型到验证器(我仍然需要使用强制转换但在方法getRealValue内只有一次)。如果我忘记传递返回类型或传递错误类型,仍然RuntimeError

  3. 如果有办法我可以在验证器中存储返回类型并使用它吗?

1 个答案:

答案 0 :(得分:10)

对于您的第一点,如果出现不适当的演员表,则无法在运行时获得ClassCastException

在你的第二种情况下,你不需要施放,见这里的例子:

public interface Foo<T> {
    public T getValue(); 
}

......然后在其他地方:

public class Blah<T> implements Foo<T> {
    @Override
    public T getValue() {
        // TODO write the code
        // note that because of type erasure you won't know what type T is here
        return null;
    }
}

......然后,在其他地方:

Blah blah1 = new Blah<String>();
String s = blah1.getValue();
Blah blah2 = new Blah<Long>();
// etc.

最后,这里有一些文献