• Showing Page History #16975
  • Showing Page History #16525
  • Showing Page History #16625
  • Showing Page History #16582

greflect Wiki

!Wellcome to greflect wiki

プロジェクトホームページおよびドキュメント一式はこちら

ここは事実上メモ書きページになっています。 なんでって?会社とかからでも記入できるからさ。(笑)

static methodの扱いについて改訂版を出すことにしたワケ

0.11-DRAFTでstatic methodの扱いについて後日改訂版を出すと 宣言した背景について。

正直、static methodについてどう扱うべきか考慮がもれていました。

と言っても現状ではstatic methodも特に制限なく実行することが 可能と思われます。例えば、

 long now = api.new Invoker<Long>(
               new Param<System>(){}, "currentTimeMillis")
       {}.invoke();

と実行すればおそらく何も問題なく実行できるでしょう。

それでは、satatic methodとinstance methodを同様に 区別なく実行可能な仕様としてしまえば解決だと思われるかもしれません。 実際、標準ライブラリのjava.lang.reflect.Method.invoke()は satatic methodもinstance methodも区別せず実行できる仕様になっているのだし、 そういうのもナシとは言えません。

しかしこのような仕様に倒すことは、(実装上は問題なくても) 仕様上の矛盾を引き起こす恐れがあると判断し、採用を躊躇しています。

static methodである java.lang.Enum.valueOf() を呼び出すときの例を考えて見ましょう。

 enum MyState { SOU, UTSU, FUTSUU };
 //  :
 MyState s = api.new Invoker<MyState>(
               new Param<Enum<MyState>>(){},
               "valueOf",
               new Param<Class<MyState>>(MyState.class){},
               new Param<String>("UTSU"){})
       {}.invoke();
これがもし次のように記述されていればどうなるでしょうか。
 enum MyState { SOU, UTSU, FUTSUU };
 enum AnotherState { };
 //  :
 MyState s = api.new Invoker<MyState>(
               new Param<Enum<AnotherState>>(){},
               "valueOf",
               new Param<Class<MyState>>(MyState.class){},
               new Param<String>("UTSU"){})
       {}.invoke();

(続)

今後のリリース案

0.11

0.11-DRAFTの品質向上版

0.2

  1. プリチェックのサポート
  2. 繰り返し実行のサポート
  3. 英語版ドキュメントの整備

0.3

  1. 文字列からParamオブジェクトを生成

ソースのダウンロード~修正のチェックインの流れ

  1. subversionとmaven2をインストール
  2. ソースのダウンロード
    1. 匿名でtrunk(最新の版)を入手するとき
        svn checkout http://svn.sourceforge.jp/svnroot/greflect/trunk/greflect
      
    2. sourceforge.jpに登録したユーザ名がyo-ziでtrunk(最新の版)を入手するとき
        svn checkout svn+ssh://yo-zi@svn.sourceforge.jp/svnroot/greflect/trunk/greflect
      
  3. ビルド
      mvn jar:jar
    
  4. プロジェクトサイトのビルド
      mvn site
    
  5. リリース時のプロジェクトサイトのビルド&配布パッケージの作成
      mvn clean site assembly:assembly
      mvn site:deploy
    
    注)assemblyは必ずsite実行後に行うこと。
  6. Eclipseでビルドするときの設定
    1. workspace下にgrelectをチェックアウト
    2. New Projectでgreflectを指定
    3. projectのpropertiesのInfoの項、 Text File EncodingをUTF-8に設定。
    4. projectのpropertiesのJava Compilerの項、 Compiler complicate levelを5.0に設定。
    5. projectのpropertiesのJava Code Style/Code Tmpletesの項、 importで etc/mukiebi-eclipse-codetemplate.xml を読み込み。
    6. projectのpropertiesのJava Code Style/Formatterの項、 importで etc/mukiebi-eclipse-codeformat.xml を読み込み。

アナウンス文のテンプレート

ジェネリクス対応JavaリフレクションAPIであるgreflectの、バージョン0.11ワーキングドラフト改訂版をリリースします。

The working draft revised edition of version 0.11 of greflect - a java reflection API supports generics - is released.

*Version: 0.11-DRAFT
*Branch: trunk
*Revision: 110

修正点
*Reflectionのコンストラクタの説明を追加しました。
*ダウンロードパッケージ(full)にソースツリーを添付するようにしました。

greflectはジェネリック型の型安全性を保障しつつ高速に動作する、 新時代のJavaリフレクションライブラリです。 リフレクションによるオブジェクトの動的な連結に、 ジェネリ ック型の柔軟さを取り入れることができます。 さらにジェネリック型の型安全性(type-safety)を生かした堅牢な プログラミング環境を提供します。

greflect is a new age library of java reflection that holds type safety of generic types. And it is speedy. The flexibility of the generic type can be taken to dynamic linking of objects by the reflection. In addition, Robust-programming environments that makes the best use of type safety of the generic type is provided.

修正候補

ホームタイトル - A reflection API for generics -

リリースに version tree/revision 表記ついでにワーキングドラフト表記

ジェネリクス機能をサポートした→ジェネリクスをサポートした 類件見直し

catchword linkage 複数形になってない

The specified type 'GenericClass<Integer,String>' is not applicable for type 'GenericClass<String,Integer>'.*"メッセージの妥当性 The instance of type type 'GenericClass<String,Integer>' cannot cast to 'GenericClass<Integer,String>'."メッセージの妥当性

エラーメッセージから specified は取る。ユーザが指定したとは限らないから

Reflectionのコンストラクタの説明

catchword小さく

ソースの同梱

ungeneric:erasure)というテクニックで 実現されており、 これらのオブジェクトはJavaJM上では単にMapやGenericDao クラスのインスタンスとしてnewされます。→うしろ続ける。

概要にはちゃんと概要を書く。

SourceForge.jp では、各プロジェクトごとに Wiki システムが利用できるようになりました。 このページも含め、あなたのプロジェクトに合わせて自由に書き換えてください

システムは現在継続的に開発中です。Wiki本体に関して、問題点や要望などがありましたら、 トラッカー を利用して報告お願い致します。

Wiki ってなに?という方は、 Wikipedia の「ウィキ」のページ を参考にしてください。

文法などのドキュメントは、サイドバーに標準で入っているリンクか、 SourceForge.jp プロジェクト内の Wikiガイド を 参照してください。