我想創建一個通用方法來確定第一個引數是否為null,如果是,則回傳默認的第二個,否則回傳第一個。
我能讓這成為可能嗎?
我不知道如何正確實施。
public static <T> ifNull(Object parameter, Object default, Class<T> type) {
return type.cast(parameter == null ? default: parameter));
}
注意:此代碼實際上并不適用,它只是一個示例。
uj5u.com熱心網友回復:
我認為這個鏈接可能有用: 在 C# 中是否有與空合并運算子 (??) 等效的 Java?
public static <T> T coalesce(T one, T two) {
return one != null ? one : two; }
要么
public static <T> T coalesce(T... params) {
for (T param : params)
if (param != null)
return param;
return null; }
uj5u.com熱心網友回復:
你可以使用這樣的東西,
public static <T> T getValOrDefault(T value, T defaultValue) {
return value != null ? value : defaultValue;
}
uj5u.com熱心網友回復:
我不是 100% 確定,但我認為你想要這樣的東西:
public static <T> T ifNull(T parameter, T defaultValue) {
return parameter == null ? defaultValue: parameter;
}
uj5u.com熱心網友回復:
如果您正在接收兩個可空型別的物件,Object并希望通過將 in 實體傳遞Class<T>給您的方法將它們動態型別轉換為給定型別,我認為您打算實作此目的:
public static <T> Optional<T> ifNull(Object first, Object second, Class<T> type) {
return Optional.ofNullable(type.cast(first))
.or(() -> Optional.ofNullable(type.cast(second)));
}
Class<T>物件代表一個類或介面
方法cast()會將給定物件轉換為特定型別T,如果該物件可分配給該型別,否則ClassCastException將拋出 a。請注意,編譯器不會針對這種向下轉換的方式發出警告(這總是潛在的不安全)。
Optional是Java 8引入的特殊容器物件,以便在結果值可能為null. 可選物件可能包含一個值或為空,但它永遠不會是null(如果您遵循良好實踐并且不使用可選作為欄位、方法引數并且不將其存盤在任何地方)
Optional.ofNullable()創建包含給定值的可選物件,如果它是非空的,否則回傳一個空的可選物件。
方法or()將用提供的可選物件替換當前的可選物件(如果它為空)。
方法執行的結果如下:
Optional[first] --(first == null)--> Optional[second] --(second == null)--> empty optional
筆記:
- 為了宣告一個泛型方法,您必須在修飾符和回傳型別或關鍵字之間放置一個泛型型別引數
<T>或通配符(在上面的方法中是泛型型別引數并且是一個回傳型別)。<? extends Number>void<T>Optional<T> default是 Java 中的關鍵字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/454780.html
上一篇:回傳可選物件的通用型別轉換方法
