初めからjava-1315を認識します.汎型を使う時に発生する問題(1)-汎型は基礎タイプを使用できません.

1974 ワード

この章では、汎型を使う時に発生する問題について議論します.
今日は最初の問題を紹介します.つまり、汎型は基本タイプを使えないということです.
1.例
package com.ray.ch13;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		// ArrayList<int> list;//error
		ArrayList<Integer> list = new ArrayList<Integer>();
	}

}
上のコードを見ると、汎型はIntegerしか使えませんので、intは使えません.
しかし、java内の自動包装機構は実現可能性を提供しています.
上のコードを修正してください.
package com.ray.ch13;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		// ArrayList<int> list;//error
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}
	}

}
実はiはintタイプですが、自動包装機構により直接Integerタイプに変換します.
しかし、数が増えるにつれて、上のコードは非常に大きな性能問題が発生します.これは隠れた問題です.
 
2.自動包装の仕組みは万能ではない.
例:
私たちは下にジェネレータを使ってオブジェクトを作成してロードします.
package com.ray.ch13;

public class Test {
	public static void main(String[] args) {
		// FillArray.fill(new int[5], new MyGenerator());//error
		FillArray.fill(new Integer[5], new MyGenerator());
	}

}

interface Generator<T> {
	T next();
}

class MyGenerator implements Generator<Integer> {
	@Override
	public Integer next() {
		return 0;
	}
}

class FillArray<T> {
	public static <T> void fill(T[] arr, Generator<T> generator) {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = generator.next();
		}
	}
}
上のコードを見てみます.メーンメソッドでは、それぞれintとIntegerの配列を作成します.intのスロー異常はここでは自動包装の仕組みが機能しません.
 
まとめ:この章では主に汎型が基本タイプを使用できないという問題を討論しました.
 
この章はここまでです.ありがとうございます.
----------------------------
目次