1

Java リフレクションの使用:

  • 特定のオブジェクト (private、protected、public など) のすべてのメソッドを取得するにはどうすればよいですか?
  • そして、おそらくクラスの構造表現を作成します
  • 最後に、オブジェクトを文字列またはバイト配列にシリアル化します

このアイデアは健全に見えますか?または、これは私をどこにも連れて行きませんか?

私が達成しようとしているのは、次のことができるようにすることです。

  • java.lang.Objectanyをバイト配列または文字列にシリアライズする
  • 実装されていないクラス/オブジェクトはSerializable、シリアル化のためにアプリケーションにスローされます
4

4 に答える 4

1

複雑に聞こえます。XStreamを使用するだけです。

String xml = new XStream().toXML(whatever);
于 2013-04-02T09:07:05.203 に答える
0

Class.getDeclaredMethods()Class.getDeclaredFields()現在のクラスでのみ宣言された可視性を持つメソッドとフィールドを返します。これらのメソッドは継承されたものを返しません。これを行うには、クラス階層を繰り返し処理し、各スーパー クラスに対してこれらのメソッドを呼び出す必要があります。つまり、次のようになります。

List<Method> methods = new ArrayList<>();
List<Field> fields = new ArrayList<>();
for (Class c = clazz; c != null; c = c.getSuperClass()) {
    methods.add(c.getDeclaredMethods());    
    fields.add(c.getDeclaredFields());    
}
于 2013-04-02T09:11:56.407 に答える
0

質問 1: クラスのすべてのメソッドを取得する方法。

getDeclaredMethodsは、クラスのすべてのメソッドへのアクセスを提供します。

この Class オブジェクトによって表されるクラスまたはインターフェイスによって宣言されたすべてのメソッドを反映する Method オブジェクトの配列を返します。これには、パブリック、保護、デフォルト (パッケージ) アクセス、およびプライベート メソッドが含まれますが、継承されたメソッドは除外されます。

例: Method[] methods = Integer.class.getDeclaredMethods();

問題 2: クラスの構造表現を作成する

すでに存在しているので、なぜこれを行う必要があるのか​​ わかりません。オブジェクトの構造を提供するオブジェクトのクラスをいつでも取得できます。

于 2013-04-02T09:05:46.327 に答える
0

クラスのすべてのメソッドとフィールドを取得するには、 と を使用getDeclaredMethodsgetDeclaredFieldsます。ただし、それを使用してシリアル化できないクラスを再構成できるかどうかはわかりません。また、そうするかどうかもわかりません。しかし、ここでいくつかのアイデアを見つけることができるかもしれません: How to serialize a non-serializable in Java?

于 2013-04-02T09:06:36.103 に答える