[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