泛型不規範使用導致的問題(泛型+強制轉換)
1.強制轉換放入泛型的對應
@Test
public void test() {
Map<Long,Object> map = new HashMap<>();
map.put((long) 3, 12);
System.out.println(map.get(3));
}
執行結果:
2.反編譯結果如下:
@Test
public void test()
{
Map<Long, Object> map = new HashMap();
map.put(Long.valueOf(3L), Integer.valueOf(12));
System.out.println(map.get(Integer.valueOf(3)));
}
原因:Map.get(key)方法編譯的時候對key的處理方式和map.put(key,val) 不一致。可以對比下圖:
,put()編譯檢查了型別。而get()沒有檢查。
導致存取的物件不一致,所以取值為Null
結論:使用泛型之後,不要再使用強制轉換型別的手段處理資料,儘量使用明細的資料物件,子泛型類就用 <? super T>
相關推薦
泛型不規範使用導致的問題(泛型+強制轉換)
1.強制轉換放入泛型的對應 @Test public void test() { Map<Long,Object> map = new HashMap<>(); map.put((long) 3, 12);
C++ 泛型演算法學習筆記(equal, accumulate, back_iterator, pair)
equal equal是區間比較演算法 原型為: template <class _InputIterator1, class _InputIterator2> inline _LIBCPP_INLINE_VISIBILITY bool equal(_InputIt
C#學習筆記二 (資源托管,泛型,數組和元組,運算符和類型強制轉換)
方法 約束 資源 實例 對象 where 學習筆記 如果 數據庫連接 1.托管資源是指GC管理的內存空間,非托管資源是指文件句柄,網絡連接,數據庫連接等。 2.方法中臨時申請的變量,被存放在棧中。棧存儲非對象成員的值數據。例如在方法中有B b=new B(); b的
java類型轉換詳解(自動轉換和強制轉換)
代碼 oid 高精 log 相加 println 類型轉換詳解 範圍 void 自動轉換 class Hello { public static void main(String[] args) { //自動轉換 int a = 5; byte b = 6
微信小程序的經緯度不想寫死,需要轉成number類型不能用浮點型
程序 div this gpo 浮點型 var scale cal ati click: function (e) { var msg = this.data.placeData; var latitude = Number(msg.latitude) var
JAVA的多型(強制轉換)
1 abstract class Animal { 2 String name; 3 String color; 4 5 public Animal(String name, String color) { 6 this.name = name;
關於char 型 的 儲存實質(asc2碼錶的)
起因:有一天一個朋友發來一個程式給我看 #include <stdio.h> void main() { int a,b=322; float x,y=8.88; char cl='k',c2; a=y; \\ a=8 p
安裝WampServer關閉mysql服務後打不開了(端口沖突)
插入 wamp client mysq 精簡 服務 數據 端口號 mysql 1、WampServer自帶了mysql精簡班的數據庫了 2、WampServer自帶 的mysql和你獨立安裝的mysql端口號沖突了 3、mysql默認的端口號是3306 4、建議你修改Wam
Java學習不走彎路教程(7.Eclipse環境搭建)
運行環境 圖片 bin 分享 ron 成功 完成後 所有 點擊 7.Eclipse環境搭建 在前幾章,我們熟悉了DOS環境下編譯和運行Java程序,對於大規模的程序編寫,開發工具是必不可少的。Java的開發工具比較常用的是Eclipse。在接下來的教程中,我們將基於Ecli
Java學習不走彎路教程(2.Eclipse環境搭建)
目錄 con pac 結果 automatic eclips pat mat 行程 Eclipse環境搭建 在前一章,我們熟悉了DOS環境下編譯和運行Java程序,對於大規模的程序編寫,開發工具是必不可少的。Java的開發工具比較常用的是Eclipse。在接下來的教程中,我
PHP規範PSR11(依賴注入容器介面)介紹
本文件描述了依賴注入容器的通用介面。 ContainerInterface設定的目標是標準化框架和庫如何使用容器來獲取物件和引數(在本文件的其餘部分中稱為條目)。 本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC
Java之多執行緒安全(屌絲版,兩大解決思路,要麼不去競爭(開闢執行緒副本)、要麼有順序的競爭資源(用鎖規定執行緒秩序))
0、多執行緒安全,如果多個執行緒操作一個變數,每次都能達到預期的結果,那麼說明當前這個類起碼是執行緒安全的,我這白話的,可能有點噁心。 1、看看牛人是怎麼說的,為什麼多執行緒併發是不安全的? 在作業系統中,執行緒是不再擁有資源的,程序是擁有資源的。而執行緒是由程序建立的
牛客國慶集訓派對Day5 H-我不愛她 (KMP+字串雜湊)
題目描述 終於活成了自己討厭的樣子。 天空仍燦爛,它愛著大海。 你喜歡大海,我愛過你。 世界上充滿了巧合。我們把每句話當成一個字串,我們定義a對b的巧合值為a的最長字尾的長度並且它是恰好是b的字首,這裡的字尾或者字首包括字串的本身。 比如字串“天空仍燦
PHP使用規範之一(註釋與文件)
文章目錄 1 頁面註釋 2 類註釋 3 函式註釋 4 變數註釋 4.1 類的成員變數 4.2 特別有用的定義 4.3 變數宣告註釋說明 5 行註釋
tomcat中部署好的專案,內網和localhost可以訪問,但是外網不能訪問(Windows 2008 R2中)
在Windows 2008 R2用tomcat搭建環境能夠執行web專案,在本地用localhost或者內網可以訪問網站,但是外網均無法訪問網站,發現有三種可能性致使這種情況發生: 第一種情況:防火牆
jquery外掛select2事件不起作用(select2-3.5.4)
jquery外掛select2事件不起作用 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g
sql注入——不定期更新(二、關鍵詞繞過)
0x01 前言sql注入的過程中,經常會遇到來自防守方的過濾,waf等情況,那麼一般的sql注入語句就不能成為成功的payload,這個時候需要我們用各種繞過的姿勢,見招拆招0x02 這裡用一個簡單的例子來寫一下思路這裡過濾了一些sql注入常用的語句和過濾符號,正常的sql注
pl/sql 資料修改不了問題(表被鎖了)
由於一些不當操作(死迴圈等),會使表直接被鎖死,做不了新增,修改等操作。 此時 PL/SQL 查詢表是否被鎖定(轉) 1. 如下語句 查詢鎖定的表: SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle
Chrome開發者工具不完全指南(五、移動篇)
前面介紹了Chrome開發者工具的大部分內容工具,現在介紹最後兩塊功能Audits和Console面板。一、Audits Audits面板會針對目前網頁提出若干條優化的建議,這些建議分為兩大類,一類是網路載入效能,另一類是介面效能。首先開下它的主介面。 Audits面板的網路優化建議參照的是雅虎前端工
不分組求和(Linq、儲存過程)
A linq group by 常數: http://bbs.csdn.net/topics/390775189 如 var sum = list.GroupBy(r => 0).Select(g => new {