特定の値で始まるJAVAで一度に複数の数値フィールドを初期化します

hammerva:

私は、数値フィールドのトンが含まれているJavaクラスに取り組んでいます。それらのほとんどは、「中央三井トラスト・ホールディングス」または「FYTD」のような何かを始めるでしょう。それが一定の値と同じ始まるタイプまたは終了のすべてのフィールドを初期化することが可能です。たとえば、私は、次のフィールドがあります。

CMthRepCaseACR CMthRepUnitACR CMthRecCaseACR CMthRecUnitACR CMthHecCaseACR CMthHecUnitACR FYTDHecCaseACR FYTDHecUnitACR CMthBBKCaseACR CMthBBKUnitACR CMthPIHCaseACR。

それが可能であれば私がまたは「ACR」と最後は「中央三井トラスト・ホールディングス」で始まることをゼロにすべてのフィールドを初期化するために把握しようとしています

私は、私のような何かを行うことができます知っているcmtha = cmthb = cmthc = 0が、私はあなたがマスクのいくつかの種類が初期化することができる場所コマンドがあった思っていました

感謝

マーヴィン :

あなたはJavaクラスが言ったことに変更(および例えば、コレクションを使用するか、値を格納するためにマップする)あなたの最善の策は、おそらくあることができないと仮定すると、反射(参照:トレイルを:リフレクションAPIを)。リフレクションはあなたのクラスのすべてのフィールドへのアクセスを提供し、あなたは、あなたが好きなものは何でもマッチングを実装することができます。

ここであなたの実際のクラスにあなたが始めるために、短いデモです、マイナスエラー処理、健全性チェックとadaptions:

import java.util.stream.Stream;

public class Demo {

    private static class DemoClass {
        private int repCaseACR = 1;
        private int CMthRepUnit = 2;
        private int foo = 3;
        private int bar = 4;

        @Override
        public String toString() {
            return "DemoClass [repCaseACR=" + repCaseACR + ", CMthRepUnit=" + CMthRepUnit + ", foo=" + foo + ", bar="
                    + bar + "]";
        }
    }

    public static void main(String[] args) {
        DemoClass demoClass = new DemoClass();
        System.out.println("before: " + demoClass);
        resetFields(demoClass, "CMth", null);
        System.out.println("after prefix reset: " + demoClass);
        resetFields(demoClass, null, "ACR");
        System.out.println("after suffix reset: " + demoClass);
    }

    private static void resetFields(DemoClass instance, String prefix, String suffix) {
        Stream.of(instance.getClass().getDeclaredFields())
                .filter(field ->
                        (prefix != null && field.getName().startsWith(prefix))
                            || (suffix != null && field.getName().endsWith(suffix)))
                .forEach(field -> {
                    field.setAccessible(true);
                    try {
                        field.set(instance, 0);
                    } catch (IllegalArgumentException | IllegalAccessException e) {
                        // TODO handle me
                    }
                });
    }
}

出力:

before: DemoClass [repCaseACR=1, CMthRepUnit=2, foo=3, bar=4]
after prefix reset: DemoClass [repCaseACR=1, CMthRepUnit=0, foo=3, bar=4]
after suffix reset: DemoClass [repCaseACR=0, CMthRepUnit=0, foo=3, bar=4]

注:両方のリンクは真剣に日付を記入されているが、反射のコア機能は同じです。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=393919&siteId=1