জাভা ক্লাসে ঘোষিত স্থির ক্ষেত্রগুলি পুনরুদ্ধার করুন


163

আমার নিম্নলিখিত ক্লাস রয়েছে:

public class Test {
    public static int a = 0;
    public int b = 1;
}

শুধুমাত্র স্থিতিশীল ক্ষেত্রের একটি তালিকা পেতে प्रतिबिंब ব্যবহার করা সম্ভব? আমি সচেতন আমি এর সাথে সমস্ত ক্ষেত্রে একটি অ্যারে পেতে পারি Test.class.getDeclaredFields()। তবে মনে হয় এটি কোনও Fieldস্থির ক্ষেত্রের প্রতিনিধিত্ব করে কিনা তা নির্ধারণের কোনও উপায় নেই।


আমি জাভা নতুন, আমি জানতে চাই যে জাভা কেন এই বৈশিষ্ট্যগুলিকে সি # এর মতো ফিল্ড ক্লাসে রাখেনি, এই নকশাটি থেকে কী লাভ? ধন্যবাদ।
অ্যালেন

উত্তর:


327

আপনি এটি এর মতো করতে পারেন:

Field[] declaredFields = Test.class.getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : declaredFields) {
    if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
        staticFields.add(field);
    }
}

12

আমি দুর্ঘটনাক্রমে এই প্রশ্নটি পেরিয়ে গিয়েছিলাম এবং অনুভব করেছি যে এটি স্ট্রিম ব্যবহার করে একটি জাভা 8 আপডেটের প্রয়োজন:

public static List<Field> getStatics(Class<?> clazz) {
    List<Field> result;

    result = Arrays.stream(clazz.getDeclaredFields())
            // filter out the non-static fields
            .filter(f -> Modifier.isStatic(f.getModifiers()))
            // collect to list
            .collect(toList());

    return result;
}

স্পষ্টতই, সেই নমুনাটি পাঠযোগ্যতার জন্য কিছুটা অলঙ্কৃত। আসলে, আপনি সম্ভবত এটি লিখতে হবে:

public static List<Field> getStatics(Class<?> clazz) {
    return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
        Modifier.isStatic(f.getModifiers())).collect(toList());
}

4
"আসলে, আপনি সম্ভবত এটি এটি লিখতেন" ... আপনি কেন "বাস্তবে" যে পাঠযোগ্যতা গুরুত্বপূর্ণ তা মনে করেন না?
মাইকেল

2
প্রথমে, আমি মনে করি না যে এটির মতো সাইটে কোনওরকম ইংরেজি উপহাস করা উপযুক্ত is এর বাইরে, আমি বিশ্বাস করি না যে অলঙ্কৃত উদাহরণে দেওয়া মন্তব্যগুলি প্রবাহের সাথে দূরবর্তীভাবে পরিচিত কারও পাঠযোগ্যতার উন্নতি করতে পারে, বা অকেজো ফেরতের পরিবর্তনশীলও নয়। আমি যদি সত্যিকারের কোডে তাদের মুখোমুখি হই তবে আমি উভয় শব্দকেই বিবেচনা করব। আমার বেল্টের অধীনে স্ট্রিমগুলির সাথে আরও অভিজ্ঞতার সাথে, আমি আজ পঠনযোগ্যতার জন্য মূল নিউলাইনগুলি রাখার বিকল্প চাই। কেউ নিখুঁত হয় না। আমি উভয়ই এমন একটি উদাহরণ সরবরাহ করার লক্ষ্য রেখেছিলাম যা নতুন প্রোগ্রামারদের জন্য সুস্পষ্ট ছিল পাশাপাশি একটি বাস্তববাদীও ছিল।
টর্কে

3
আমি তোমার ইংরাজিকে উপহাস করছিলাম না আপনি ইংরেজিতে ভাল. আপনি কী বলছেন তা আমি বুঝতে পারি না। এবং হ্যাঁ, আমি সম্মত হই যে মন্তব্যগুলি অতিরিক্ত অতিরিক্ত এবং প্রথমটির ফর্ম্যাটিংটি আরও ভাল। আমার বক্তব্যটি হ'ল আপনি "পাঠযোগ্যতার জন্য অলঙ্করণ" মন্দ বলে মনে করছেন, যখন পাঠযোগ্যতা একটি অবিশ্বাস্যভাবে গুরুত্বপূর্ণ কোড মানের মেট্রিক।
মাইকেল


0

সহজ সরল, আপনি ক্ষেত্রটি স্থির কিনা তা পরীক্ষা করতে আপনি মডিফায়ার ব্যবহার করতে পারেন। এই ধরণের কাজের জন্য একটি নমুনা কোড এখানে।

public static void printModifiers(Object o) {
    Class c = o.getClass();
    int m = c.getModifiers();
    if (Modifier.isPublic(m))
        System.out.println ("public");
    if (Modifier.isAbstract(m))
        System.out.println ("abstract");
    if (Modifier.isFinal(m))
        System.out.println ("final");
    if(Modifier.isStatic(m))
        System.out.println("static");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.