遇到个这个提示:Unchecked cast from Iterator to Iterator String Iterator<String> keys = data.keys(); 修改为: Iterator<?> keys = data.keys(); String name = (String) keys.next(); 在获取值的时候才进行类型转换…
在Java中,经常会将一个Object类型转成自己想要的Map.List等等.通常的做法是: Object obj = ....; Map<String, String> castMap = (HashMap<String, String>) obj; 在这里会产生unchecked cast warning,有代码洁癖的就会想办法干掉它.解决办法就是在方法上添加一个注解@SuppressWarnings("unchecked") ,比较优雅的方案就是提供一个工…
list集合中的实体的一个属性是另一个实体的集合(如下) public class PetInfo { private int petId; private String private Set<PictureInfo> pictureInfos = new HashSet<PictureInfo>(); } 如果要在页面使用循环获取pictureInfos 集合的第一条数据            如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以…
-----------------------------------------------------------------------------前言---------------------------------------------------------------------------------- python中的for循环可以在各种容器container上遍历所有可用元素. 一个类里面,如果实现了  __iter__ 这个函数, 那这个类就是 “iterable”. 如…
首先,java语言室类型安全的,通常我们遇到这个问题是出现在Object转化为目标类型时, 这个转化并不是安全的.这个问题普遍认为因为使用了jdk1.5或者1.6的泛型, request.getAttribute("***")得到的是一个默认为Object的类型,当把他们转成List<***>时, 编译器认为有可能会出错,所以提示这个类型安全. 但是具体如何解除这个警告呢,以下是大家普遍用的取消警告的方法(不过危险并没有解除) 一:方法上添加@SuppressWarning…
原因 数据库中 code 字段 类型为 varchar 而实体的类型为 int  导致string 类型无法转化为int 类型而报错 public int code { get; set; } 参考:https://www.cnblogs.com/Godric/p/10111594.html…
表明Object转化为ArrayList这个转化并不是安全的.. 编译的时候需要加入修饰符才能正常编译(具体是那个修饰符..不记得了.^_^),否则会提示有警告 当然这只是一个警告,如果楼主自信这个转化是没问题的,就可以在其所在函数前加上注解@SuppressWarnings("uncheck")这样就可以去掉那条难看的提示警告的小黄线了.. 但是不鼓励这么做,楼主还是应该使用安全的类型转换…
From Thinking in Java 4th Edition. 泛型实现了:参数化类型的概念,使代码可以应用于多种类型.“泛型”这个术语的意思是:“适用于许多许多的类型”. 如果你了解其他语言(例如: C++)中的参数化类型机制,你就会发现,有些以前能做到的事情,使用Java的泛型机制却无法做到. Java中的泛型需要与C++进行一番比较.了解C++模板的某些方面,有助于你理解泛型的基础.同事,非常重要的一点是:你可以了解Java泛型的局限性是什么,以及为什么会有这些限制.最终是要让你理解…
Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的对象的类型 class Holder1 { private Circle a; public Holder1(Circle a) { this.a = a; } Circle get() { return a; } } 上面的类的可重用性不怎么样,无法持有其他类型的任何对象,下面通过持有Object…
第十五章 泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 在面对对象编程语言中,多态算是一种泛化机制. 泛型实现了参数化类型的概念,使代码可以应用于多种类型. 15.2 简单泛型 创造容器类促进了泛型的出现. 下面是只能持有单个对象的类: class Automobile {} public class Holder1 { private Automobile a; public Holder1…
一,数组的协变性(covariant array type)及集合的非协变性 设有Circle类和Square类继承自Shape类. 关于数组的协变性,看代码: public static double totalArea(Shape[] arr){ double total = 0; for (Shape shape : arr) { if(shape != null) total += shape.area(); } return total; } 如果给 totalArray(Shape[…
简介 上一篇文章介绍了泛型的基本用法以及类型擦除的问题,现在来看看泛型和数组的关系.数组相比于Java 类库中的容器类是比较特殊的,主要体现在三个方面: 数组创建后大小便固定,但效率更高 数组能追踪它内部保存的元素的具体类型,插入的元素类型会在编译期得到检查 数组可以持有原始类型 ( int,float等 ),不过有了自动装箱,容器类看上去也能持有原始类型了 那么当数组遇到泛型会怎样? 能否创建泛型数组呢?这是这篇文章的主要内容. 这个系列的另外两篇文章: 泛型数组 如何创建泛型数组 如果有一个…
JSONObject jsonObject = new JSONObject(jsonString); Iterator iterator = jsonObject.keys(); while(iterator.hasNext()){ key = (String) iterator.next(); value = jsonObject.getString(key); } private static Map<String, List<NewNet>> toMap(Object ob…
一.静态导入 1.       导入类的静态属性 import static java.lang.System.out; out.println("haha"); 2.       导入类的静态方法 import static java.lang.Math.*; // 导入Math类的所有静态成员 int num = abs(-10); 二.基本数据类型的包装类 1.       Integer x = 1; x = x + 1;  经历了什么过程? 装箱à 拆箱 à 装箱 2.   …
//嵌套遍历,先给外层的map(假设是放在root中的,如果放在context的map中,要加#)取个别名,放到Actioncontext中 <s:iterator value="map" var="mar"> //当map被放到iterator之后,每遍历一个元素,就临时将其放到栈顶,所以可以直接取值 //这个value就是外层map的值,也就是里层的map <s:iterator value="value"> //每次…
test.xlsx: Code: package poi; import static org.junit.Assert.*; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.apache.poi.ss.…
类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection<T> { IIterator<T> iterator(); //返回迭代器 void add(T t); T get(int index); } /** * 自己定义迭代器接口 相似于java.util.Iterator * 用于遍历集合类ICollection的数据 * @auth…
之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator.我们首先来看Iterator中的源码. 通过JDK源码我们发现Iterator是一个接口,包含三个方法:hasNext.next.remove. package java.util; public interface Iterator<E> { /** *如果迭代器中还有元素则返回true */ boolean hasNext(); /** *返回迭代器中的下一个元素 */ E n…
前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和ArrayList.HashSet.LinkedList等等.根据核心框架图,相信我们都已经对Collection这个JavaSE中最常用API之一有一个较为全面的认识. 这个学习过程,还可以推及到其他常用开源框架和公司项目的学习和熟悉上面.借助开发工具或说明文档,先是对项目整体有一个宏观的认识,再根…
写的非常棒的一篇总结: http://blog.csdn.net/speedme/article/details/22398395#t1 下面主要看各个集合如何使用迭代器Iterator获取元素: 1.list使用迭代器Iterator public class testArrayList { public static void main(String args[]) { f1(); f2(); } public static void f1(){ List<String> strList…
Java之Iterator 1.实例源码 /** * @Title:IteratorJava.java * @Package:com.you.model * @Description:Iterator测试 * @Author: 游海东 * @date: 2014年4月5日 下午9:10:03 * @Version V1.2.3 */ package com.you.model; import java.util.Collection; import java.util.HashSet; impo…
目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口. 迭代器,使你能够通过循环来得到或删除集合的元素.ListIterator 继承了Iterator,以允许双向遍历列表和修改元素. 原理 在获取迭代器的时候,会创建一个集合的副本.同时会创建一个指针指向迭代器迭代集合的其实位置. 方法 ha…
09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet import com.fly.bean.Student; public class Demo1_Array { public static void main(String[] args) { Student[] arr = new Student[5]; //创建引用类型…
背景:一直以来对迭代器的问题理解不是很透彻,特别是迭代器和异常ConcurrentModificationException之间的联系.通过debug,详细了解其底层的具体实现过程. 简介 Iterator必须依附于Collection对象,若有一个Iterator对象,则必然有一个与之关联的Collection对象. Iterator提供了两个方法来迭代访问Collection集合里的元素,并可通过remove()来删除集合中上一次next()方法返回的集合元素. 当使用Iterator迭代访…
基础大杂烩 -- 目录 Java中的Iterator非常方便地为所有的数据源提供了一个统一的数据读取(删除)的接口,但是新手通常在使用的时候容易报如下错误ConcurrentModificationException,原因是在使用迭代器时候底层数据被修改,最常见于数据源不是线程安全的类,如HashMap & ArrayList等. 为什么要有fast-fail 一个案例 来一个新手容易犯错的例子: String[] stringArray = {"a","b"…
Iteratable: public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } default Spliterator<T> spliterator() { r…
引言   从JDK1.5起,增加了加强型的for循环语法,也被称为 "for-Each 循环".加强型循环在操作数组与集合方面增加了很大的方便性.那么,加强型for循环是怎么解析的呢?同时,这是不是意味着基本for循环就会被取代呢? 语法: for(var item:items){//var 代表各钟类型 //相关操作 } 一.数组中的 for-Each 循环 我们先来看一下数组中的 for-Each 循环的使用: String str[]= new String[]{"1&…
Iterable Interface Iterable<T> 方法: Iterator<T> iterator() Returns an iterator over a set of elements of type T. Returns: an Iterator. Iterable接口有一个方法声明,方法用于获取迭代器.实现该接口的类表明可以使用foreach来遍历.实现该接口的类中的iterator()方法必须返回一个迭代器.而迭代器类通常作为内部类来实现,此内部类必须实现It…
Iterable: public interface Iterable<T> { Iterator<T> iterator(); } 上面是Iterable源码,只有一个iterator(),所以Iterable接口只是用来返回一个新的迭代器,意味着这个集合支持迭代 Collection是list和set的父接口,而Collection实现了Iterable,所以list和set都可以使用迭代器 Iterator: public interface Iterator<E>…
迭代器的应用场景: 1.对集合进行增加删除,禁止使用foreach,循环的动态操作2.倒序遍历3.遍历循环 步入正题:为何禁止在foreach内进行增删? 先看一下代码: /**         *         正例:         *         Iterator<String> iterator = list.iterator();         *         while (iterator.hasNext()) {         *             Strin…