簡體   English   中英

提供類型安全的方法有用嗎?

[英]Is it useful to provide a type-safe method?

我正在設計界面,如下所示:

public interface Parameters {

    public <T> T getValue(ParameterName pn, Class<T> valueType) throws ClassCastException;
}

如果要返回的值的Class實例不是作為參數傳遞的ClassAssignableForm ,則實現必須拋出ClassCastException

它會引起感冒嗎? 它提供了編譯時的類型安全性,但是我們可以通過顯式強制轉換來做到這一點。

或者最好只聲明

public Object getValue(ParameterName pn)

將所有類轉換問題留給客戶端。

我使用了這種形式的API,在其中添加了將類型轉換為所需類型的功能。 例如,如果它是一個字符串,但是您需要一個整數,它將嘗試解析它。

否則,如您建議的那樣,您不會添加該方法沒有提供的內容。

 public <T> T getValue(ParameterName pn);

這樣可以避免顯式強制轉換。

誤解是通過將預期返回類型的Class對象作為參數傳遞來獲得編譯時的類型安全。 如果客戶端傳遞了錯誤類型的Class ,則僅在運行時才會檢測到錯誤。

但是我認為帶有Class參數的設計還有其他優點:

  • 參數創建了一個自然的地方來記錄有關返回類型的方法的行為。
  • 您可以在該方法中編寫代碼以檢查Class參數,並在用戶犯錯時提供特定且有意義的錯誤消息。
  • 它在調用代碼中非常明顯,並引起對方法行為的注意。

我可以想到該設計的兩個缺點:

  • 參數的存在可能給用戶一種印象,即參數會影響方法的返回值。
  • 它比使用Peter在其回答中建議的無限制的通用返回類型更為冗長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM