2006/9/29 Fri

解決編

Filed under: 雑記 — nico @ 11:03:03

てことで、一応「Java ジェネリック」でググって飛んでくるヒトもいると思われるので解決編を晒してみるテスト。
まぁ、ぶっちゃけ糞の役にも立たないカモしれない姑息な手段ですが・・・。

(てゆーか、技術系はそっち系のカテゴリ起こせよって話もあるんだけど・・・。Javaにソコまで取り組むとは思えない(をい))

で、何をしたかってジェネリックなアロケーターが作れなかったので、ジェネリックな基本クラス作って、派生クラスでインスタンス生成するようにした・・・。
結局、利用者側に痛みのある実装に・・・。

アロケーターの基本クラスがこんな感じ。

abstract public class Allocater<T>
{
  abstract public T createInstance();
  public T[] createArray(int size)
  {
    return null;
  }
}

で、共通メソッドの実装側はこんなイメージのメソッドになってて。

public <T> T Load(Allocater<T> creater)
{
  T ret = creater.createInstance();
  ・・・
}

利用する側はこんな感じで読込先クラス用のアロケーター作って使う・・・と。

class DataAllocater extends Allocater<Data>
{
  public Data createInstance()
  {
    return new Data();
  }
}

・・・
  // 読み込み処理
  Data data = loader.Load(new DataAllocater());

てことでこんな感じに・・・。
まぁ、当初の予定と何が変わったって言えば、アロケーターの派生クラスが必須になったって事だけだって話もあるけど、なんつーか、納得いかねーー。

この「派生クラス必須」ってのを、プロジェクトメンバーに説明するのがどれ程面倒か、考えるだけで今から気が重いです・・・えぇ。
果たして理解してもらえるのやら。

と、ちなみにアロケーターの基本クラスに「createArray」が有るのは、調べたら

T[] array = new T[0];

とかも出来なかったから。
てゆーか、JavaのAPIのjava.util.ArrayListとか自体、new T[0]が出来ないのが原因でやたら変な関数(T[] toArray(T[] a))が準備されてる辺り、絶対Javaのジェネリックの実装は何か間違えてる・・・と思ったりする。

#アロケーターの基本クラスをinterfaceにするって話もあるんだが・・・createArrayは必須じゃねーしなぁ・・・むむむ。

コメント (1) »

  1. がんばります!

    コメント by うさぽん。 — 2006/10/1 Sun @ 2:41:09

コメント RSS トラックバック URL

コメントをどうぞ

Link Free. Copyright (C) 2005-2007 nico. All rights reserved.
HTML convert time: 0.433 sec. Powered by WordPress ME