1

Windows7でNetbeans7.2.1を使用しています。

エンティティのすべてのプロパティを取得して、文字列配列に格納しようとしています。私はこれを私が考えることができる最も一般的な方法でやりたいので、jCSVのような方法:

public void writeAll(List<E> data) throws IOException {
    for (E e : data) {
        write(e);
    }
}

あなたはここでそのパッケージを見つけることができます:https ://code.google.com/p/jcsv/

public String[] getProperties( E e ){

    String [] properties = new String[ e.numberOfProperties ];
    int i = -1;

    for ( P p : e ) {

        i += 1;
        properties[i] = p.toString(); // OR properties[i] = e.getProperty[i].toString();

    }

    return properties;
}

Propertiesクラスでこれを行う方法があるはずですが、エンティティからプロパティを取得するためにそれを使用する方法がわかりません。単純なことだと思いますが、どこにあるのかわかりません。

4

1 に答える 1

1

@Ian Robertsがほのめかしたように、ここでjavaIntrospectorクラスをチェックしてください。このクラスは、エンティティのプロパティにアクセスするために標準のJavaBeanの命名規則を使用している場合にのみ役立ちます。

あなたがしたいことは、メソッドを使用BeanInfoしてクラスのを取得しIntrospector#getBeanInfo(Class beanClass)、次にのメソッドを使用してgetMethodDescriptors()BeanInfoBeanのすべての「getter」メソッドを取得することです。そこから、それらを繰り返し処理し、エンティティのプロパティを取得して呼び出すことtoString()ができます。

単純な古いリフレクションを使用するのとは対照的に、このクラスを使用する利点の1つは、BeanInfoクラスをイントロスペクトした後にクラスのをキャッシュして、パフォーマンスを向上させることです。getまた、リフレクティブコードのようなものやリフレクティブコードをハードコーディングする必要はありませんset

getPropertiesイントロスペクターを使用したメソッドの例を次に示します。

public <T> String[] getProperties(T entity){
    String[] properties = null;
    try {
        BeanInfo entityInfo = Introspector.getBeanInfo(entity.getClass());
        PropertyDescriptor[] propertyDescriptors = entityInfo.getPropertyDescriptors();
        properties = new String[propertyDescriptors.length];
        for(int i = 0 ; i < propertyDescriptors.length ; i++){
            Object propertyValue = propertyDescriptors[i].getReadMethod().invoke(entity);
            if(propertyValue != null){
                properties[i] = propertyValue.toString();
            } else {
                properties[i] = null;
            }
        }
    } catch (Exception e){
        //Handle your exception here.
    }
    return properties;
}

この例はコンパイルして実行します。

Apache CommonsにはライブラリBeanUtilsもあることを覚えておいてください。これは、特にこのようなことにも非常に役立ちます(Javadocはこちら)。

于 2013-02-27T12:48:38.000 に答える