Generics と overload

まず、これはコンパイルを通ります。

public class Overload {
    public static void main(String[] args) {
        Overload p = new Overload();
        p.method(new A());
        p.method(new B());
    }

    public void method(A a) {
        System.out.println("A");
    }

    public void method(B b) {
        System.out.println("B");
    }
}

ちゃんと実行もできますね。

sugimura@ml110 ~/work/overload $ java Overload
A
B

でもこれは通りません。

import java.util.List;
import java.util.LinkedList;

public class Overload2 {
    public static void main(String[] args) {
        Overload2 p = new Overload2();
        p.method(new LinkedList<A>());
        p.method(new LinkedList<B>());
    }

    public void method(List<A> a) {
        System.out.println("A");
    }

    public void method(List<B> b) {
        System.out.println("B");
    }
}

overload だとみなされないみたいです。

sugimura@ml110 ~/work/overload $ javac Overload2.java 
Overload2.java:11: 名前が競合しています。
method(java.util.List<A>) と method(java.util.List<B>) は削除後の名前が同じです。
    public void method(List<A> a) {
                ^
Overload2.java:15: 名前が競合しています。
method(java.util.List<B>) と method(java.util.List<A>) は削除後の名前が同じです。
    public void method(List<B> b) {
                ^
エラー 2 個

このために別名を付けるのもめんどくさいですねぇ。 めんどくさいというか、かっこ悪いというか。

それと、「削除後の名前」ってなんでしょうね。 まぁこれはどうでもいいですが。

論述

2問回答するのに90分くらい掛かりました。

先週は初回ということもあって練習の練習ということで丸写しだったんですが、 今回はなるべく自力で頑張ってみようかと。

法律の言い回しにもだいぶ慣れてきた感じもしますが、 書くとなると間違えますね。

しかも字の大きさもだんだん小さくなるし。 丁寧に書こうとは思っていても、手書きはやはり難しいものです。



トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-29 (土) 15:27:47