Java文法糖の汎用型

2007 ワード

文法糖とは何ですか.
文法糖は糖衣文法とも呼ばれ、あるイギリスの科学者は、コンピュータ言語に何らかの文法を追加し、このような文法は言語の機能に影響を与えないと提案した.
様々な開発言語において、文法糖の存在は多かれ少なかれプログラマーに便利を提供する.実質的な機能改善は提供されませんが、効率を高め、符号化のエラー率を減らし、文法の厳格性を強化することができます.しかし、文法糖はプログラマーに依存し、その背後のコードを見極めることができないと考えている人もいる.
汎用型はjavaJDK 1.5の新しい特性、それはパラメータ化のタイプで、クラス、インタフェース、方法の中でそれぞれ汎型クラス、汎型インタフェース、汎型方法と呼ぶことができます;
JAva言語の汎用型は、ソースコードに存在し、コンパイル後にオリジナル型になる裸型とも呼ばれる.ListとListがコンパイルされた後にListとListになるように、java汎用型技術は文法糖である.JAvaで汎用を実現する方法は消去タイプと呼ばれ、擬似タイプとも呼ばれる.
擬似タイプの例:
//コンパイル前のコードです
	public static void main(String[] args)
	{
		Map map = new HashMap();
		map.put("hello", "Java");
		System.out.println(map.get("hello"));
	}

---------------------------------------------------
//これはコンパイルされたコードです.
	public static void main(String[] args)
	{
		Map map = new HashMap();
		map.put("hello", "Java");
		System.out.println(map.get("hello"));
	}

これは汎用タイプがコンパイルされると、原生タイプになることを示している.
汎用型がリロードされる例1:
	public void method(List list)
	{
		System.out.println("Integer");
	}
	public void method(List list)
	{
		System.out.println("String");
	}

皆さんはそれが間違っていると思いますか?コンパイル後、List listとList listは消去タイプがオリジナルタイプListlistとListlistになり、消去により2つの方法の署名が同じになるため、答えは肯定的である.
汎用型がリロードされる例2:
	public int method(List list)
	{
		System.out.println("Integer");
		return 1;
	}
	public String method(List list)
	{
		System.out.println("String");
		return "";
	}

戻り値が増加したため、これはokをコンパイルしていますが、私たちが学んだリロードはこのようなものですか.なぜコンパイルが通過したのでしょうか.
まず、リロードはメソッドの戻り値に基づいて決定されず、メソッドのリロードはメソッドが異なる特徴を持つ署名を要求し、戻り値はメソッドの特徴署名に含まれないが、Classファイルでは記述子が異なる限り2つのメソッドが共存することができる.すなわち、2つの同じメソッド名と同じパラメータ(フィーチャー署名)は、メソッドの戻り値が異なる限り、Classファイルに合法的に共有することができる.