দিন clazzকিছু হতে Classএবং objকিছু হতে Object।
কি
clazz.isAssignableFrom(obj.getClass())
সর্বদা হিসাবে একই
clazz.isInstance(obj)
?
তা না হলে পার্থক্য কী?
NullPointerExceptionযদি obj == null।
দিন clazzকিছু হতে Classএবং objকিছু হতে Object।
কি
clazz.isAssignableFrom(obj.getClass())
সর্বদা হিসাবে একই
clazz.isInstance(obj)
?
তা না হলে পার্থক্য কী?
NullPointerExceptionযদি obj == null।
উত্তর:
clazz.isAssignableFrom(Foo.class)যখনই clazzবস্তুটি প্রতিনিধিত্ব করে বর্গটি একটি সুপারক্লাস বা সুপারিন্টারফেস হবে তখনই সত্য হবে Foo।
clazz.isInstance(obj)যখনই বস্তু objশ্রেণীর উদাহরণ হিসাবে আসল হবে তখনই সত্য হবে clazz।
এটাই:
clazz.isAssignableFrom(obj.getClass()) == clazz.isInstance(obj)
সবসময় তাই যতদিন সত্য clazzএবং objnonnull হয়।
Byte b = 3; Comparable.class.isAssignableFrom(b.getClass()) == Comparable.class.isInstance(b)); -> ইন্টারফেসের ক্ষেত্রেও এটি সত্য।
objহয় nullতবে clazz.isAssignableFrom(obj.getClass()) == clazz.isInstance(obj)একটি নিক্ষেপ করবে NullPointerExceptionএবং ফিরে আসবে না true।
উভয় উত্তর বলপার্কে রয়েছে তবে একটিও সম্পূর্ণ উত্তর নয়।
MyClass.class.isInstance(obj)একটি উদাহরণ যাচাই করার জন্য। এটি সত্য হয় যখন প্যারামিটার উদ্দেশ্যটি অকার্যকর হয় এবং এটিকে MyClassনা বাড়িয়ে দেওয়া যেতে পারে ClassCastException। অন্য কথায়, আপত্তি একটি উদাহরণ MyClassবা এর সাবক্লাস।
MyClass.class.isAssignableFrom(Other.class)সত্য MyClassহিসাবে ফিরে আসবে যদি , বা একটি সুপারক্লাস বা সুপারিন্টারফেস Other,। Otherএকটি ক্লাস বা একটি ইন্টারফেস হতে পারে। এটি সত্য Otherরূপে উত্তর দেয় যদি ক MyClass।
প্রদর্শনের জন্য একটি ছোট কোড:
public class NewMain
{
public static void main(String[] args)
{
NewMain nm = new NewMain();
nm.doit();
}
class A { }
class B extends A { }
public void doit()
{
A myA = new A();
B myB = new B();
A[] aArr = new A[0];
B[] bArr = new B[0];
System.out.println("b instanceof a: " + (myB instanceof A)); // true
System.out.println("b isInstance a: " + A.class.isInstance(myB)); //true
System.out.println("a isInstance b: " + B.class.isInstance(myA)); //false
System.out.println("b isAssignableFrom a: " + A.class.isAssignableFrom(B.class)); //true
System.out.println("a isAssignableFrom b: " + B.class.isAssignableFrom(A.class)); //false
System.out.println("bArr isInstance A: " + A.class.isInstance(bArr)); //false
System.out.println("bArr isInstance aArr: " + aArr.getClass().isInstance(bArr)); //true
System.out.println("bArr isAssignableFrom aArr: " + aArr.getClass().isAssignableFrom(bArr.getClass())); //true
}
}
A.class.isAssignableFrom(B.class)? আমি আউটপুট দ্বারা বিভ্রান্ত হয়েছি :)
isAssignableFrom()একটি নিক্ষেপ করে NullPointerException, যেখানে isInstance()কেবল মিথ্যা ফিরিয়ে দেয়। এটাই আসল উত্তর।
আমি মনে করি এই দুজনের জন্য ফলাফল সর্বদা এক হওয়া উচিত। পার্থক্যটি হ'ল আপনার ব্যবহারের জন্য ক্লাসের একটি উদাহরণ প্রয়োজন isInstanceতবে কেবলমাত্র Classঅবজেক্টটি ব্যবহার করতে isAssignableFrom।
Comparable.class.isAssignableFrom(Byte.class) == trueকিন্তু Byte.class.isInstance(Comparable.class) == false। অন্য কথায়, isInstance()ইন্টারফেসের জন্য প্রতিসম নয়, কেবল সাবক্লাসের জন্য।
Byte.class.isInstance(Comparable.class)মিথ্যা কারণ কোনও Classবস্তুর উদাহরণ নেই Byte। সঠিক তুলনা Comparable.class.isAssignableFrom(Byte.class)হয় Comparable.class.isInstance((byte) 1), যা সত্য।
Byteআবিষ্কার করবেন এটি প্রসারিত Numberএবং একটি বর্গ। (byte) 1এর সমতুল্য নয় Byte। প্রাক্তন একটি আদিম। পরেরটি একটি ক্লাস।
byteকরার Byteকারণ প্যারামিটার প্রকার isInstanceহয় Object।
বংশবৃদ্ধির জন্য, আমরা নীচের মতো এই দুটি এপিআই বুঝতে পারি:
X.class.isAssignableFrom(Y.class)যদি Xএবং Yএকই শ্রেণীতে, অথবা Xহয় Yএর সুপার বর্গ বা সুপার ইন্টারফেস, সত্য, অন্যথায়, মিথ্যা ফিরে।
X.class.isInstance(y)বলুন yক্লাসের একটা নিদর্শন হয় Y, যদি Xএবং Yএকই শ্রেণীতে, অথবা Xহয় Yঅন্যথায়, মিথ্যা 'র সুপার বর্গ বা সুপার ইন্টারফেস, সত্য ফিরে।