被引入遺產(遺傳前)代碼與引入JDK 5的通用物之間的兼容性。它們啟用了漸進的過渡,但是妥協了。 [2 總類型: 使用無需指定類型參數的通用類。 例子:
gen raw = new gen(new double(98.6)); //創建的原油類型
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado
//帶有通用支持的gen類
類Gen
將總類型分配給通用類型,反之亦然,可能會導致執行時間錯誤。
// Classe Gen com suporte a genéricos class Gen{ T ob; // Declara um objeto do tipo T Gen(T o) { // Construtor ob = o; } T getob() { // Retorna o objeto ob return ob; } } // Demonstração de tipos brutos class RawDemo { public static void main(String[] args) { // Usando genéricos corretamente Gen iOb = new Gen(88); Gen strOb = new Gen("Generics Test"); // Criando um tipo bruto Gen raw = new Gen(new Double(98.6)); double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos System.out.println("value: " d); // Erros de tempo de execução com tipos brutos // int i = (Integer) raw.getob(); // Erro de tempo de execução! // Atribuição de tipo bruto para genérico strOb = raw; // Correto, mas perigoso // String str = strOb.getob(); // Erro de tempo de execução! // Atribuição de genérico para tipo bruto raw = iOb; // Correto, mas perigoso // d = (Double) raw.getob(); // Erro de tempo de execução! } }
strob = raw; //危險:RAW包含兩倍,但Strob在等待弦
raw = iob; //危險:RAW現在包含整數,但是強制可能會失敗
在執行時間:中的異常
無法在編譯時間中檢測不一致。
Javac編譯器在檢測不安全的總類型時會生成警告。
strOb = raw; // Perigoso: raw contém Double, mas strOb espera String raw = iOb; // Perigoso: raw agora contém Integer, mas coerção pode falhar
gen raw = new gen(new double(98.6)); //總類型 strob = raw; //不安全的分配 [2 避免使用總類型:
始終使用類型參數來享受仿製藥提供的安全性。
int i = (Integer) raw.getob(); // Erro porque raw contém Double
[2
通過將預性代碼集成到通用代碼中來添加嚴格的檢查和測試。免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3