2016-05-03 10 views
1

Autoboxingとjavaでunboxingを行っている間、私はJavaがプリミティブなデータ型をWrapper Classに変換し、必要に応じてその逆を行うことを学びました。例えば関数がIntegerを引数として渡した場合、値を1として渡すと、javaコンパイラはそれをnew Integer(1)に変換します。今は私の場合です。javaがプリミティブデータ型の関数オーバーロードをサポートするのはなぜですか?

public class JavaTest 
{ 

    public static void Test(Integer integer) 
    { 
     System.out.println("in Integer"); 
    } 

    public static void Test(int integer) 
    { 
     System.out.println("in int"); 
    } 

    public static void main(String[] args) 
    { 
     Test(1); 
    } 
} 

この場合、javaはコンパイル時例外をスローする必要があります。それが正常にコンパイルし、その結果、以下のプリントがint型

iはテスト(int型の整数)メソッドはその後、javaは私が結果与えを削除した場合における

整数

私の質問はなぜJavaがそのような関数のオーバーロードを許可しているのですか?

+2

全くそのええ、それはちょっと – Abhijit

+1

で重複しません。まずクラスとプリミティブの型の違いを理解する必要があります。 – Vucko

+0

私はそれが類似していると思いますが、重複していないと思います。 – Mena

答えて

3

Javaは、下位互換性のためにそのようなオーバーロードを許可します。

Java 5.0では自動ボクシングと自動アンボクシングが導入されているため、メソッドの過負荷解決の第1段階では、自動ボクシングと自動アンボクシングを使用せずに一致するメソッドを見つけようとします。

したがって、int引数を取るメソッドのみがあなたの例にあります。そのメソッドを削除すると、メソッドのオーバーロード解決の第1段階で一致が見つかりません。第2段階では、Integer引数を取るメソッドと一致させるために自動ボックスを使用します。

15.12.2. Compile-Time Step 2: Determine Method Signature

プロセスの残りの部分は、従来のJava SE 5.0にJavaプログラミング言語のバージョンとの互換性を確保するために、三相、に分割されます。相は、次のとおり

  1. 第一段階は、(§15.12.2.2)ボクシングまたはアンボクシング変換、または可変アリティメソッド呼び出しの使用を可能にすることなく、オーバーロード解決を行います。この段階の間に適用可能な方法が見つからない場合、処理は第2段階に進む。

    は、これは、Java SE 5.0の前に、Javaプログラミング言語で有効だったすべての呼び出しが変数アリティ法の導入、暗黙のボクシングおよび/またはアンボクシングの結果として曖昧では考慮されないことを保証します。しかしながら、可変アリティ法(第8.4.1項)の宣言は、第1段階では可変アリティ法が固定アリティ法として扱われるので、所定の方法方法呼び出し式に対して選択された方法を変更することができる。たとえば、すでにm(Object)を宣言しているクラスでm(Object ...)を宣言すると、一部の呼び出し式(m(null)など)ではm(Object) )はより具体的です。

  2. 第二相(§15.12.2.3)は可能ボクシングとアンボクシングながら、オーバーロード解決を行い、それでも変数アリティメソッド呼び出しの使用を排除します。この段階で適用可能な方法が見つからない場合、処理は第3段階に進む。

    これは、固定アリティメソッド呼び出しによって適用可能な場合、メソッドが可変アライメントメソッド呼び出しによって決して選択されないことを保証します。

  3. 第3フェーズ(15.12.2.4)では、過負荷を可変アリティメソッド、ボクシング、およびボックス解除と組み合わせることができます。

+2

FAQに従って重複した質問に答えることはお勧めしません。http://meta.stackexchange.com/questions/10841/how-should-重複する質問を処理する。適切な重複を検索し、代わりに投票する必要があります。 – Tunaki

関連する問題