Java高级特性 2
6.泛型:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);
例子:
a..使用?通配符可以引用其他各种参数化的类型,但不能调用与参数化有关的方法;
Collection<?> c = new Vector<String>();
c.add("abc");//报错
c.size();//正确
所以,?通配符定义的变量主要用作引用,调用与参数化无关的方法,如果要调用与参数化相关的方法,那么必须在使用?通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。
b..向下限定通配符:
正确:Vector<? extends Number> x = new Vector<Integer>();
错误:Vector<? extends Number> x = new Vector<String>();
向上限定通配符:
正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();
jdk中原有的集合类中存在一些问题,java5以后希望你在定义集合时,明确表示你要向集合中装哪种类型的数据。为了和以前版本的兼容性,无法加入指定类型以外的数据,编译器会去除掉“类型”信息,使运行效率不受影响。在新语法情况,还可以把各种不同类型的数据装到一个集合中,可以按原始的方式去做。ArrayList<E>中的E是类型变量,参数化的类型(整个ArrayList<Integer>,即进行了参数化的类型),原始类型(也就是ArrayList),类型参数(ArrayList<Integer>中的Integer),以上几个术语应该牢记。参数化类型引用一个原始类型的对象,可以,但是报告警告。原始类型引用一个参数化类型的对象,可以,也会报告警告。有时候定义一个方法,打印一个集合中的数据,集合的类型变量该使用?通配符进行参数化。切忌不可以使用Object,如果使用了Object,则这个类型只能匹配Object类型的变量。例如:Vec
相关文档:
在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_, ......
有很长一段时间没有写博客了。最近一年,收到不少交流邮件都是关于webservice,大部分都是素要webservice实例。
其实对webservice 了解不是很深,只是根据工作需要去接触,去学习。最近项目和其他一个.net项目需要做数据交互,交互方式就采用Webservice.
特将开发中遇到的问题总结并分享;
开发中遇到的问题有:
1)jav ......
众所周知,在Java多线程编程中,一个非常重要的方面就是线程的同步问题。
关于线程的同步,一般有以下解决方法:
1. 在需要同步的方法的方法签名中加入synchronized关键字。
转载注明出处:http://x- spirit.javaeye.com/、http: //www.blogjava.net/zhangwei217245/
2. 使用synchronized块对需要进行同步的代码段进行 ......
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经 ......