电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談java安全編碼指南之堆污染

瀏覽:3日期:2022-08-11 11:56:44
目錄產生堆污染的例子更通用的例子可變參數產生堆污染的例子

有同學可能會問了,既然JDK5引入了泛型,為什么還會出現堆污染呢?

這是一個好問題,讓我們看一個例子:

public void heapPollution1(){ List normalList= Arrays.asList('www.flydean.com',100); List<Integer> integerList= normalList;}

上面的例子中,我們使用Arrays.asList創建了一個普通的List。

這個List中包含了int和String兩種類型,當我們將List賦值給List的時候,java編譯器并不會去判斷賦值List中的類型,integerList中包含了非Integer的元素,最終導致在使用的時候會出現錯誤。

直接給List賦值不會進行類型檢查,那么如果我們是直接向List中添加元素呢?

我們看下下面的例子:

private void addToList(List list, Object object){ list.add(object);}@Testpublic void heapPollution2(){ List<Integer> integerList=new ArrayList<>(); addToList(integerList,'www.flydean.com');}

上面的例子中,我們定義了一個addToList方法,這個方法的參數是一個普通的List,但是我們傳入了一個List。

結果,我們發現list.add方法并沒有進行參數類型校驗。

上面的例子該怎么修改呢?

我們需要在addToList方法的List參數中,也添加上類型校驗:

private void addToList(List<Integer> list, Object object){ list.add(object);}

如果addToList是一個非常通用的方法怎么辦呢?在addToList的參數中添加參數類型是現實的。

這個時候,我們可以考慮使用Collections.checkedList方法來將輸入的List轉換成為一個checkedList,從而只接收特定類型的元素。

public void heapPollutionRight(){ List<Integer> integerList=new ArrayList<>(); List<Integer> checkedIntegerList= Collections.checkedList(integerList, Integer.class); addToList(checkedIntegerList,'www.flydean.com');}

運行上面的代碼,我們將會得到下面的異常:

java.lang.ClassCastException: Attempt to insert class java.lang.String element into collection with element type class java.lang.Integer

更通用的例子

上面我們定義了一個addToList方法,因為沒有做類型判斷,所以可能會出現堆污染的問題。

有沒有什么辦法既可以通用,又可以避免堆污染呢?

當然有的,我們看下面的實現:

private <T> void addToList2(List<T> list, T t) { list.add(t);}public <T> void heapPollutionRight2(T element){ List<T> list = new ArrayList<>(); addToList2(list,element);}

上面的例子中,我們在addToList方法中定義了一個參數類型T,通過這樣,我們保證了List中的元素類型的一致性。

可變參數

事實上,方法參數可以是可變的,我們考慮下面的例子:

private void addToList3(List<Integer>... listArray){ Object[] objectArray = listArray; objectArray[0]= Arrays.asList('www.flydean.com'); for(List<Integer> integerList: listArray){for(Integer element: integerList){ System.out.println(element);} }}

上面的例子中我們的參數是一個List的數組,雖然List中的元素類型固定了,但是我們可以重新賦值給參數數組,從而實際上修改掉參數類型。

如果上面addToList3的方法參數修改為下面的方式,就不會出現問題了:

private void addToList4(List<List<Integer>> listArray){

這種情況下,List的類型是固定的,我們無法通過重新賦值的方式來修改它。

以上就是淺談java安全編碼指南之堆污染的詳細內容,更多關于java安全編碼指南之堆污染的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 范秘书_懂你的范文小秘书| 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 智慧旅游_智慧景区_微景通-智慧旅游景区解决方案提供商 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 斗式提升机_链式斗提机_带式斗提机厂家无锡市鸿诚输送机械有限公司 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 |