`

Java - Generic

    博客分类:
  • java
阅读更多

 

Generics

<!--[if !supportLists]-->1.       <!--[endif]--> Functions:

The compiler can now check the type correctness of the program at compile-time.

 

A generic type declaration is compiled once and for all, and turned into a single class file, just like an ordinary class or interface declaration

 

<!--[if !supportLists]-->2.       <!--[endif]-->Define a simple generics

 

public interface List <E>{

    void add(E x);

    Iterator<E> iterator();

}

 

public interface Iterator<E>{

    E next();

    boolean hasNext();

}

 

 

List<? extends Shape> is an example of a bounded wildcard.

 

<!--[if !supportLists]-->3.   <!--[endif]-->WildCard

?  无限制的通配符(unbounded wildcard---不确定或者不关心实际的类型参数

In general, if you have an API that only uses a type parameter T as an argument, its uses should take advantage of lower bounded wildcards (? super T). Conversely, if the API only returns T, you'll give your clients more flexibility by using upper bounded wildcards (?extends T).

this situation arises relatively frequently, there is a special rule that allows such code under very specific circumstances in which the code can be proven to be safe. This rule, known as wildcard capture, allows the compiler to infer the unknown type of a wildcard as a type argument to a generic method.

 

<!--[if !supportLists]-->4.   <!--[endif]-->Notice

参数化 类型

List<String>

 

实际类型参数

String

 

泛型

List<E>

 

形式类型参数

E

 

无限制通配符类型

List<?>

 

原生态类型

List

 

有限制类型参数

<E extends Number>

 

 

递归类型限制

<T extends  Comparable<T>>

 

有限制通配符类型

List<? Extends Number>

 

泛型方法

Static <E> List<E> asList<E[] a>

 

类型令牌

String.class

 

 

 

 

<!--[if !supportLists]-->1)             <!--[endif]-->Class literal 类文字中必须使用原生态类型,规范不允许使用参数化类型。


 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics