06.何でも入れるジェネリック


カスタムリソースタイプ
  • クラスで使用する変数には複数のデータ型がある場合があり、その機能(メソッド)が同じ場合はクラスのデータ型を指定せず、
  • である.
    クラスを後で使用するときに指定するよう宣言します.

  • 実際に使用されるデータフォーマットのコピーはコンパイラによって検証されるため、信頼できるプログラミング方法です.

  • コレクションフレームワークで多く使用

  • JENERICタイプを使用しない例
  • マテリアルが粉末の場合
    public class ThreeDPrinter1{
    	private Powder material;
    	
    	public void setMaterial(Powder material) {
    		this.material = material;
    	}
    	
    	public Powder getMaterial() {
    		return material;
    	}
    }
    マテリアルがPlasticの場合
    public class ThreeDPrinter2{
    	private Plastic material;
    	
    	public void setMaterial(Plastic material) {
    		this.material = material;
    	}
    	
    	public Plastic getMaterial() {
    		return material;
    	}
    
    }
  • の様々なタイプの
  • の代わりにオブジェクトを使用することができる.
    public class ThreeDPrinter{
    
    	private Object material;
    	
    	public void setMaterial(Object material) {
    		this.material = material;
    	}
    	
    	public Object getMaterial() {
    		return material;
    	}
    }
  • オブジェクトを使用する場合は、
  • に変換する必要があります.
    ThreeDPrinter printer = new ThreeDPrinter();
    
    Powder powder = new Powder();
    printer.setMaterial(powder);
    
    Powder p = (Powder)printer.getMaterial();
  • ジェニーンリッククラス定義
  • GenericPrinter.java
    public class GenericPrinter<T> {
    	private T material;
    	
    	public void setMaterial(T material) {
    		this.material = material;
    	}
    	
    	public T getMaterial() {
    		return material;
    	}
    	
    	public String toString(){
    		return material.toString();
    	}
    }

  • データ型パラメータT(typeparameter):このクラスを使用するときに実際に使用するデータ型を指定します.静的変数は使用できません.

  • GenericPrinter:Generic資料型

  • E:element、K:key、V:valueなど複数のアルファベットから選択可能
  • JENICクラスの使用
    Powder.java
    public class Powder {
    	
    	public String toString() {
    		return "재료는 Powder 입니다";
    	}
    }
    Plastic.java
    public class Plastic {
    
    	public String toString() {
    		return "재료는 Plastic 입니다";
    	}
    }
    GenericPrinter.java
    public class GenericPrinter<T> {
    	private T material;   //T 자료형으로 선언한 변수
    	
    	public void setMaterial(T material) {
    		this.material = material;
    	}
    	
    	public T getMaterial() {   //T 자료형을 반환하는 제네릭 메서드
    		return material;
    	}
    	
    	public String toString(){
    		return material.toString();
    	}
    }
    GenericPrinterTest.java
    public class GeneriPrinterTest {
    
    	public static void main(String[] args) {
    
    		GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
    		powderPrinter.setMaterial(new Powder());
    		System.out.println(powderPrinter);
    		
    		GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
    		plasticPrinter.setMaterial(new Plastic());
    		System.out.println(plasticPrinter);
    		
    	}
    
    }
    ダイヤモンド演算子<>

  • ダイヤモンド演算子として<>を使用

  • ArrayList list = new ArrayList<>(); //diamonden演算子ではデータ型を省略できます

  • Generickでの資料型推論(Java 10から)
    	ArrayList<String> list = new ArrayList<String>()  => var list = new ArrayList<String>();