① 集合接口或集合类在jdk5.0时都修改为带泛型的结构。 ② 在实例化集合类时,可以指明具体的泛型类型 ③ 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。 比如:add(E e) —>实例化以后:add(Integer e) ④ 注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换 ⑤ 如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型。
publicclassDAO{public<E>Eget(int id,E e){E result =null;return result;}}
publicstatic<T>voidfromArrayToCollection(T[] a,Collection<T> c){for(T o : a){
c.add(o);}}publicstaticvoidmain(String[] args){Object[] ao =newObject[100];Collection<Object> co =newArrayList<Object>();fromArrayToCollection(ao, co);String[] sa =newString[20];Collection<String> cs =newArrayList<>();fromArrayToCollection(sa, cs);Collection<Double> cd =newArrayList<>();// 下面代码中T是Double类,但sa是String类型,编译错误。// fromArrayToCollection(sa, cd);// 下面代码中T是Object类型,sa是String类型,可以赋值成功。fromArrayToCollection(sa, co);}
classCreature{}classPersonextendsCreature{}classManextendsPerson{}classPersonTest{publicstatic<TextendsPerson>voidtest(T t){System.out.println(t);}publicstaticvoidmain(String[] args){test(newPerson());test(newMan());//The method test(T) in the type PersonTest is not//applicable for the arguments (Creature)test(newCreature());}}
泛型在继承上的体现
publicvoidprintCollection(Collection c){Iterator i = c.iterator();for(int k =0; k < c.size(); k++){System.out.println(i.next());}}publicvoidprintCollection(Collection<Object> c){for(Object e : c){System.out.println(e);}}
写入list中的元素时,不行。因为我们不知道c的元素类型,我们不能向其中添加对象。 唯一的例外是null,它是所有类型的成员。 将任意元素加入到其中不是类型安全的: Collection> c = new ArrayList(); c.add(new Object()); // 编译时错误 因为我们不知道c的元素类型,我们不能向其中添加对象。add方法有类型参数E作为集合的元素类型。我们传给add的任何参数都必须是一个未知类型的子类。因为我们不知道那是什么类型,所以我们无法传任何东西进去。 唯一的例外的是null,它是所有类型的成员。 另一方面,我们可以调用get()方法并使用其返回值。返回值是一个未知的类型,但是我们知道,它总是一个Object。
publicstaticvoidmain(String[] args){List<?> list =null;
list =newArrayList<String>();
list =newArrayList<Double>();// list.add(3);//编译不通过
list.add(null);List<String> l1 =newArrayList<String>();List<Integer> l2 =newArrayList<Integer>();
l1.add("尚硅谷");
l2.add(15);read(l1);read(l2);}publicstaticvoidread(List<?> list){for(Object o : list){System.out.println(o);}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
1. 安装memcached server
a. 下载memcached-1.2.6-win32-bin.zip
b. 解压缩,dos 窗口切换到 memcached.exe所在目录,运行memcached.exe -d install
c.启动memcached Server,直接在dos窗口键入 net start "memcached Server&quo
Log4j组件:Logger、Appender、Layout
Log4j核心包含三个组件:logger、appender和layout。这三个组件协作提供日志功能:
日志的输出目标
日志的输出格式
日志的输出级别(是否抑制日志的输出)
logger继承特性
A logger is said to be an ancestor of anothe
public static void main(String[] args) throws IOException {
//输入流
InputStream in = Test.class.getResourceAsStream("/test");
InputStreamReader isr = new InputStreamReader(in);
Bu
对于那些具有强迫症的工程师来说,软件汉化固然好用,但是汉化不完整却极为头疼,本方法针对iReport汉化不完整的情况,强制使用英文版,方法如下:
在 iReport 安装路径下的 etc/ireport.conf 里增加红色部分启动参数,即可变为英文版。
# ${HOME} will be replaced by user home directory accordin
网上找了很久,都是用Gallery实现的,效果不是很满意,结果发现这个用OpenGL实现的,稍微修改了一下源码,实现了无限循环功能
源码地址:
https://github.com/jackfengji/glcoverflow
public class CoverFlowOpenGL extends GLSurfaceView implements
GLSurfaceV