我的想法是有一个验证器接口,它有方法getRealValue()
。返回值取决于字段,可以是String
,Integer
或Long
值。
我的机会是:
我可以将返回类型指定为Object
,并在每次调用此方法后使用强制转换。 (RuntimeError
如果错误的施法发生了。)
我可以在实例化时使用泛型返回类型到验证器(我仍然需要使用强制转换但在方法getRealValue
内只有一次)。如果我忘记传递返回类型或传递错误类型,仍然RuntimeError
。
如果有办法我可以在验证器中存储返回类型并使用它吗?
答案 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.
最后,这里有一些文献: