[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12145] Re: Generics と Interface で ( 別に パズルという訳ではないのですが ...)



  高橋(智)です。

  今度は、自分でも実行結果が分からなくなったので、パズルにしようかと
思いまして、書いています。(^^;;;;;
  とりあえず、次のようにRawタイプかつ自前のブリッジメソッドで凌ぐしか
ないと考えてみました。
  このソースコードをコンパイル&実行するとどうなるでしょうか?
---------------------------------------------------------------------
interface InfA<T> {
  public void setData(T x);
}

interface InfB<T> {
  public void setData(T x);
}

public class Untitled1 implements InfA, InfB {
  public void setData(String x) {
    System.out.println("setData(String x)");
  }

  public void setData(Integer x) {
    System.out.println("setData(Integer x)");
  }

  public void setData(Object x) {
    System.out.println("setData(Object x)");
    if( x instanceof String )
      setData((String)x);
    else if( x instanceof Integer )
      setData((Integer)x);
    else
      throw new IllegalArgumentException();
  }

  public static void main(String[] args) {
    Untitled1 obj = new Untitled1();
    InfA<String> a = obj;
    String test = "test";
    a.setData(test);
  }
}
---------------------------------------------------------------------

-- 
高橋智宏

Yasuhiro Endoh wrote:
> 
> 遠藤です。
> 
> 今読んでいる本のP8の下から3行目
> [制約6] イレイジャ処理の結果、メソッドのシグニチャが同じになるメソッドは定義できない
> にあたるところではないでしょうか。
> 
> より正確にはP37の
> メソッドがオーバーロードされるのは、
> 名前が同じで、オーバーライド等価ではないシグニチャを
> 持つ場合だけです。
> かと。
> 
> TAKAHASHI, Tomohiro wrote:
> >   高橋(智)です。
> >
> >   別にパズルという訳ではないのですが、以下のようにシグネチャが同一の
> > メソッドを持つinterfaceを同時にimplementsすると、どうなるのでしょうか? (^^;
> >
> > [Untitled1.java]
> > -----------------------------------------------------------------
> > interface InfA<T> {
> >   public void setData(T x);
> > }
> >
> > interface InfB<T> {
> >   public void setData(T x);
> > }
> >
> > public class Untitled1 implements InfA<String>, InfB<Integer> {
> >   private String s;
> >   private Integer i;
> >
> >   public void setData(String x) {
> >     s = x;
> >   }
> >
> >   public void setData(Integer x) {
> >     i = x;
> >   }
> > }
> > -----------------------------------------------------------------
> >
> 
> --
> // Y. Endoh