1. 程式人生 > >泛型不規範使用導致的問題(泛型+強制轉換)

泛型不規範使用導致的問題(泛型+強制轉換)

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 {