জাভা শ্রেণীর প্রতিবিম্ব দ্বারা বিমূর্ত কিনা তা আমি কীভাবে নির্ধারণ করতে পারি


183

আমি একটি জার ফাইলের ক্লাসগুলির মধ্যে ইন্টারেক্টিভ করছি এবং বিমূর্ত নয় এমনগুলি সন্ধান করতে চাই। আমি ক্লাসগুলি ইনস্ট্যান্ট করে এবং ইনস্ট্যান্টেশন এক্সেক্সেশনকে ফাঁদে ফেলে এটি সমাধান করতে পারি তবে কিছু ক্লাসের ভারি শুরু হওয়ার কারণে এটির পারফরম্যান্স হিট হয়েছে। ক্লাস.জাভা ডক্সে স্পষ্টতই অ্যাবস্ট্রাক্ট () এর মতো কিছু পাই না।

উত্তর:


320

আপনি যখন ক্লাস অবজেক্টে getModifiers () কল করবেন তখন এর অন্যতম পরিবর্তক হিসাবে এটি বিমূর্ত হবে।

এই লিঙ্কটি সাহায্য করা উচিত।

 Modifier.isAbstract( someClass.getModifiers() );

এছাড়াও:

http://java.sun.com/javase/6/docs/api/java/lang/reflect/Modifier.html

http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getModifiers ()


1
ধন্যবাদ! একটি সামান্য দ্রষ্টব্য: আপনি একটি পরিবর্তনশীল নাম হিসাবে "শ্রেণি" ব্যবহার করতে পারবেন না, সম্ভবত আপনি নিজের উদাহরণটি পরিবর্তন করতে চান।
টিম বাথ

@seth আমি মনে করি এটি হওয়া উচিত Modifier.isAbstract( someClass.class.getModifiers() );সম্ভবত আপনি এটি পরিবর্তন করতে চান
স্টিভেন 7mwesigwa

সাধারণ জাভা নামকরণের কনভেনশন অনুসারে এটি হয় হয় someClass.getModifiers()বা SomeClass.class.getModifiers()কোথায়Class<SomeClass> someClass = SomeClass.class;
নেক্সাস


1
public static boolean isInstantiable(Class<?> clz) {
    if(clz.isPrimitive() || Modifier.isAbstract( clz.getModifiers()) ||clz.isInterface()  || clz.isArray() || String.class.getName().equals(clz.getName()) || Integer.class.getName().equals(clz.getName())){
        return false;
    }
    return true;
}

যদি এটি একটি ইন্টারফেস হয় এবং শ্রেণীর নাম java.util.List আপনি সম্ভবত
অ্যারেলিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.