javaとreflectに関するarc_at_dmzのブックマーク (5)
-
クラスパスの通っていて、ロード可能なクラスを全て取得するメソッドを作ってみた。 クラスパスから全ての".class"ファイルを検索し、Class#forName で読み込んでいる。 外部Jarも全て含めて取得できる。結構強引なので、あまり使えないかも。 例外が発生したClassは全て無視しているが、この辺りはもう少しちゃんとした方が良いかもしれない。GetClassUtil#getLoadClassList を呼び出せば、Classのリストが返却される。GetClassUtil.java package com.wasurenairoku; import java.io.File; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.Z
-
-
-
こうゆうニーズってありますよね。 自分も以前、Android用のORMを自作しようとしていて特定のアノテーションのついたクラス一覧がほしいって場面がありました。 いろいろ調べてみると なんでもAndroidアプリケーション︵apk︶の中にはDalvik VMの実行形式であるclasses.dexファイルが含まれてるらしい。 そして名前の通り、こいつからクラスの一覧を取得できます。 ソースコードはこんな感じで。 [java] // apkからdex形式のクラス名エントリを列挙する String packageName = context.getApplicationInfo().sourceDir; DexFile dexFile = new DexFile(new File(packageName)); Enumeration entiries = dexFile.ent
-
sun.reflect.Reflection#getCallerClass( int )でメソッドの呼び出し元クラスを取得します。引数でスタックの深さを指定します。 サンプル: import sun.reflect.Reflection; public class GetCallerClass {public static void main( String[] args ) { new Master().call(); } static class Master { void call () { new Kitten().meow(); } } static class Kitten { void meow () { // 呼び出し元クラス名を得る。 System.out.println( "0 : " + Reflection.getCallerClass( 0 ).getName(
-
1