বলুন কিছু সদস্যের সাথে আমার একটি ক্লাস রয়েছে, এবং সদস্যদের ক্লাসের তুলনায় কম সীমাবদ্ধ অ্যাক্সেস মডিফায়ার রয়েছে।
এর একটি দৃ concrete় উদাহরণ হতে পারে:
package apples;
class A { // package private
public int foo() { // public (=> less restrictive than *package private*)
return 42;
}
}
সদস্য অ্যাক্সেস সংশোধকের চেয়ে আরও সীমাবদ্ধ এমন কোনও শ্রেণি অ্যাক্সেস মডিফায়ার বুঝতে আমার পক্ষে কম সীমাবদ্ধ সদস্য অ্যাক্সেস সংশোধককে ওভাররাইড করবে । সুতরাং কম সীমাবদ্ধ সদস্য অ্যাক্সেস মডিফায়ারটির কোনও প্রভাব থাকতে হবে না।
- আমার বোধগম্যতা কি সঠিক?
- তা না হলে এর পরিণতি কী?
- কম সীমাবদ্ধ সদস্য অ্যাক্সেস সংশোধক হওয়ার বৈধ কারণগুলি কী হতে পারে?
- অবশেষে, অনুসরণ করার সর্বোত্তম অনুশীলনগুলি কী কী ?
আমি কিছু পরীক্ষা-নিরীক্ষাও করেছি কারণ আমি ভেবেছিলাম যে একবার আমি ফাংশন উল্লেখগুলি চারপাশে পাস করা শুরু করলে এর পরিণতি হতে পারে, তবে তারপরেও অ্যাক্সেস সংশোধকটিকে কোনও বিষয় মনে হয় না।
আমি যে পরিস্থিতিটি তৈরি করেছি তা নিম্নলিখিত:
apples.B
একটি সর্বজনীন পদ্ধতি সরবরাহ করেbla()
যা একটি রেফারেন্স প্রদান করেapples.A.foo
।- তারপর
pizzas.C
কলapples.B.bla
একটি রেফারেন্স প্রাপ্তA.foo
এবং এটি কল। - সুতরাং
A.foo()
সরাসরি দৃশ্যমান নয়C
, তবে কেবল অপ্রত্যক্ষভাবে এটি অ্যাক্সেসযোগ্যB.bla()
আমি এটি পরীক্ষা করেছি এবং আমি foo()
প্যাকেজের অ্যাক্সেস মডিফায়ারটিকে বেসরকারী করি কিনা তা কোনও পার্থক্য করে না।
package apples;
import java.util.function.IntSupplier;
public class B {
public IntSupplier getReferenceToAFoo() {
A aInstance = new A();
return aInstance::foo;
}
}
package pizzas;
import apples.B;
import java.util.function.IntSupplier;
public class C {
private int callAFooIndirectly() {
B bInstance = new B();
IntSupplier intsupplier = bInstance.getReferenceToAFoo();
return intsupplier.getAsInt();
}
public static void main(String[] args) {
C cInstance = new C();
int i = cInstance.callAFooIndirectly();
System.out.println(i);
assert 42 == i;
}
}
java.util.Collections.SingletonSet<E>
হয়private
মধ্যেjava.util.Collections
)।