4

私はJavaでリフレクションを使用しています。

これが私のコードです:

  public String getClassFields(Class aClass)
  {
  String ClassFields = "";
  Field[] Fields = aClass.getDeclaredFields();
  boolean isPublic;
  String separator = System.getProperty( "line.separator" );
  for (Field f : Fields) 
  {
    isPublic = Modifier.isPublic(f.getModifiers());
    if (isPublic)
        ClassFields += "public " + f.getType() + " " + f.getName() + separator;
    else
        ClassFields += "private " + f.getType() + " " + f.getName() + separator;
  }    
  return ClassFields;

}

クラスのフィールドが次の場合:

private int Diameter;
private Colour Colour;

上に投稿したコードは次を返します。

private int Diameter
private class Colour Colour

コードを変更して、行から追加の「クラス」単語を削除するにはどうすればよいですか。

private class Colour Colour
4

1 に答える 1

4

現在、次のように提供されるデフォルトの文字列表現を取得していますClass#toString()

オブジェクトを文字列に変換します。文字列表現は、文字列「class」または「interface」の後にスペースが続き、その後に、によって返される形式のクラスの完全修飾名が続きますgetName。このClassオブジェクトがプリミティブ型を表す場合、このメソッドはプリミティブ型の名前を返します。このClassオブジェクトがvoidを表す場合、このメソッドは「void」を返します。

したがって、別のメソッドを使用してクラスの名前を取得する必要があります。変化する

f.getType()

((Class) f.getType()).getName()
// or
((Class) f.getType()).getSimpleName()

補足:そのようなループで文字列の連結を実行しないでください。毎回文字列をコピーする必要があるため、2次(O(n^2))漸近ランタイムになります。StringBuilder代わりに使用してください。

于 2013-03-25T05:45:30.687 に答える