iT邦幫忙

DAY 19
4

實戰 Java SE 7 系列 第 19

Project Coin - 改進泛型實作在創建時的型別推論 完

Java SE 7 又提供了這個偷懶的方法,那使用上有什麼例外或限制嗎?
在 Java 裡,所有的數字類別(Integer, Long, Float, Double 等),都是繼承 Number 類別,還記得前兩天的 Constants 類別嗎?我們想說讓 Constant 類別更有彈性一點,所以寫了下面這樣的程式碼:

package idv.jacky.ironman4;
 
import idv.jacky.ironman4.day17.Constant;

public class Day19Example {
 
 public static void main(String[] args) {
 Constant<Double> pi = new Constant<>(3.14);
 Constant<Number> c = new Constant<>(3.14);
 }
}

既然 Double 是一種 Number,那程式碼第10行應該沒問題吧?不過,在編譯時,我們遇到這樣的錯誤訊息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Constant<Double> to Constant<Number>
at idv.jacky.ironman4.Day19Example.main(Day19Example.java:10)

怎麼會!根據 Java 多型的特性,Double 應該可以轉型成 Number 物件啊!例如:

Number n = new Double(3.14);

很不幸地,泛型就是要你指定確定的單一型別,所以像 Constant<Double> 這種複合型別是沒辦法自動轉型的,因此我們還是得乖乖地指定確定的型別才行。


上一篇
Project Coin - 改進泛型實作在創建時的型別推論
下一篇
複習 - 關閉資料流
系列文
實戰 Java SE 7 31

尚未有邦友留言

立即登入留言