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

[jfriends] Re: [jfriends] Re: ポインタと参照




>なんとなく、下のようにやりたくなってしまったわたし(笑)。
>
>  public void swap(MyInteger a, MyInteger b) {
>    MyInteger tmp = new MyInteger(a.get());
>    a.set(b.get());
>    b.set(tmp.get());
>  }
>
>少しは汎用性があるのかな、と。

コピーコンストラクターも書いてみました。

public class MyInteger {
  private int value;
  public MyInteger(MyInteger original) { value = original.get(); }
  public MyInteger(int initialvalue) { value = initialvalue; }
  public void set(int newvalue) { vaule = newvalue; }
  public int get() { return value; }
  public void swap(MyInteger a, MyInteger b) {
    MyInteger tmp = new MyInteger(a);
    a.set(b.get());
    b.set(tmp.get());
  }
}

># MyInteger を Object に変えてみたり…無駄?(笑).

それはこういうinterfaceを書いて、

public interface IIntegerAccessor {
  public void set(IIntegerAccessor newvalue);
  public IIntegerAccessor get();
}

こうですか?

  public void swap(Object a, Object b) {
    if (a instanceof IIntegerAccessor && b instanceof IIntegerAccessor) {
      IIntegerAccessor ia = (IIntegerAccessor)a;
      IIntegerAccessor ib = (IIntegerAccessor)b;
      int tmp = ia.get(); // ここがかっこ悪いかな?
      ia.set(ib.get());
      ib.set(tmp);
    } else {
      // なにかを throw してもいいかな
    }
  }
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008