易截截图软件、单文件、免安装、纯绿色、仅160KB

java使用通配符简化泛型使用

在使用 Java™ 语言的泛型时,通配符非常令人困惑,并且最常见的一个错误就是在使用有界通配符的两种形式的其中之一(“? super T” 和 “? extends T”)时出现错误。您出错了吗?别沮丧,即使是专家也会犯这种错误,本月 Brian Goetz 将展示如何避免这个错误。
在 Java 语言中,数组是协变的(因为一个 Integer 同时也是一个 Number,一个 Integer 数组同时也是一个 Number 数组),但是泛型不是这样的(List<Integer> 并不等于 List<Number>)。人们会争论哪些选择是 “正确的”,哪些选择是 “错误的” — 当然,每种选择都各有优缺点 — 但有一点毫无疑问,存在两种使用差别很小的语义构造派生类型的类似机制,这将导致大量错误和误解。
有界通配符(一些有趣的 “? extends T” 通用类型说明符)是语言提供的一种工具,用来处理协变性缺乏 — 有界通配符允许类声明方法参数或返回值何时具有协变性(或相反,声明方法参数或返回值何时具有逆变性(contravariant))。虽然了解何时使用有界通配符是泛型较为复杂的方面,但是,使用有界通配符的压力通常都落在库作者的身上,而非库用户。最常见的有界通配符错误就是忘记使用它们,这就限制了类的使用,或是强制用户不得不重用现有的类。
有界通配符的作用
让我们从一个简单的泛型类开始(一个称为 Box 的值容器),它持有一个具有已知类型的值:
public interface Box<T> {
public T get();
public void put(T element);
}
由于泛型不具备协变性,Box<Integer> 并不等同于 Box<Number>,尽管 Integer 属于 Number。但是对于 Box 这样的简单泛型类来说,这不成问题,并且常常被忽略,因为 Box<T> 的接口完全指定为 T 类型的变量 — 而不是通过 T 泛型化的类型。直接处理类型变量允许实现多态性。清单 1 展示了这种多态性的两个示例:获取 Box<Integer> 的内容,并将它作为一个 Number,然后将一个 Integer 放入 Box<Number> 中:
清单 1. 通过泛型类利用固有的多态性

Box<Integer> iBox = new BoxImpl<Integer>(3);
Number num = iBox.get();
Box<Number> nBox = new BoxImpl<Number>(3.2);
Integer i = 3;
nBox.put(i);
通过使用简单的 Box 类,使我们确信可以没有协变性,因为在需要实现多态


相关文档:

Java连接sqlite

1.去网站http://files.zentus.com/sqlitejdbc/下载sqlitejdbc.根据自已需要,下载sqlitejdbc.(sqlitejdbc有两个版本,一种是pure的一种是native的。native的速度快。它放在**-bin.tgz里。我下的就是这种sqlitejdbc-v056-bin.tgz)
2. 下载后解压sqlitejdbc-v056-bin.tg ,有以下几个文件: libsqlitejdbc.so,sqlitejdbc.d ......

一个Java的字符串常用类

package com.tienway.util;
import java.util.ArrayList;
public class StringUtil
{

public static String ContextType1ToType2(String Type1Context)
{
if (Type1Context== null || Type1Context.length() == 0)
{
return "";
}
char[] c = Type1Con ......

java GUI

http://java.ccidnet.com/images/java/javagui/index.htm
这个是介绍java的gui各个方面的问题,以及发展的前景
SWT, SWING, AWT各自的缺点和优点,总得来说就是SWT很棒
http://www.cnblogs.com/pantian/archive/2006/10/30/544584.html
从头开始安装Eclipse和VE
http://blog.sina.com.cn/s/blog_629c53bd0100gh17.htm ......

Java 字符串,byte[],16进制的字符串互转

在调试的时候,如果要显示byte的值是否与预期一致,一般转换为16进制的字符串,或者使用base64转换后,然后显示出来。
/**
* 字符串转换成十六进制字符串
*/
public static String str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder(""); ......

简化Java日期操作的开源项目DATE4J,超级好用

以往要使用Java对时间日期进行操作,可能会用到以下的一些类:
Date and its subclasses :
java.util.Date
java.sql.Date
java.sql.Timestamp
The calendar and time zone classes :
java.util.Calendar
java.util.GregorianCalendar
java.util.TimeZone
java.util.SimpleTimeZone
(for use with the Gregorian ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号