2013-10-18 56 views
3
分配不同的返回类型

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

我的机会是:

  1. 我能做的分配返回类型为Object,并使用铸造每次经过我调用此方法。 (RuntimeError如果发生错误铸造)。我可以使用泛型返回类型验证器实例化时(我仍然必须使用铸造,但内部方法getRealValue,只有一次)。回到顶端这篇文章中的信息适用于:仍然RuntimeError如果我会忘记传递返回类型或传递错误的类型。

如果有一种方法,我可以将验证器中的返回类型存储并使用它?

+1

你的愿望,这样做通常表示一个更深层次的设计问题。 –

+0

验证来自用户的数据是常见问题。任何更好的设计都可以使用?如果是python,我的解决方案非常简单易用。但我用java关闭了。 – simar

回答

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. 

最后,这里的一些文学为您提供:

+0

我之前读过和泛型和继承。我习惯于Python风格。 Xmmm在类对象中发现了有趣的方法。会期待它。 – simar

+0

有用的和彻底的+1 :) – zx81

+0

@ ZX81谢谢:) – Mena

相关问题