2013-10-18 88 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

相關問題