GenericsTest4 me = new GenericsTest4();
GenTypeTest<<Date> > gd = me.new GenTypeTest<<Date>>(); for (int i=0; i<<5; i++) {
try {
Thread.sleep(500);
}
}
private class GenTypeTest<<T> > { // クラスの型
private T member; // インスタンス変数の型
private T[] members; // 配列の型
private List<<T> > memList // コレクションに渡す = new ArrayList<<T>>();
private void addMember(T member) { // 引数
memList.add(member);
}
=====継承関係を指定=====
* <<T extends [Class or Interface]> > で、指定クラス(インターフェース)の派生クラスであることを指定* Clazz<<? super [Class or Interface]> > で、Clazzが、指定クラス(インターフェース)の基底クラスであることを指定
import java.util.ArrayList;
import java.util.Collections;
GenericsTest5 me = new GenericsTest5();
CompareUtil<<Double> > dc = me.new CompareUtil<<Double>>();
dc.addNum(1.23);
dc.addNum(2.34);
}
// T型の基底クラス(T型を含む)に適応する Comparable を継承した T型
private class CompareUtil<<T extends Comparable<<? super T>> >> { List<<T> > numList = new ArrayList<<T>>();
public void addNum(T num) {
numList.add(num);
// メソッドで、ジェネリクス型を使う
// いろいろバージョンをオーバーロードしなくてもよい
public static <<T extends Number> > T log10(T num) {
double ret = Math.log10(num.doubleValue());
return (T) new Double(ret);
====拡張forループで使用する====
Messageクラスを保持するMessagesクラスを拡張forループに対応させる
*Iterable<<Message>>の実装
public class Messages implements Iterable<<Message> > { private List<<Message> > messages; private List<<Message> > getMessages(){
if (this.messages == null) {
this.messages = new ArrayList<<Message>>();
}
return this.messages;
}
public Iterator<<Message> > iterator() {
return getMessages().iterator();
}