Bazı üyelerle bir sınıfım olduğunu ve üyelerin sınıfın kendisinden daha az kısıtlayıcı erişim değiştiricisine sahip olduğunu varsayalım.
Somut bir örnek şunlar olabilir:
package apples;
class A { // package private
public int foo() { // public (=> less restrictive than *package private*)
return 42;
}
}
Anladığım kadarıyla üye erişim değiştiricisinden daha kısıtlayıcı olan bir sınıf erişim değiştiricisi , daha az kısıtlayıcı üye erişim değiştiricilerini geçersiz kılar . Dolayısıyla, daha az kısıtlayıcı bir üye erişim değiştiricisinin hiçbir etkisi olmamalıdır.
- Anlayışım doğru mu?
- Değilse, sonuçları nelerdir?
- Daha az kısıtlayıcı üye erişim değiştiricilerinin olması için geçerli nedenler neler olabilir?
- Son olarak, izlenecek en iyi uygulamalar nelerdir?
Ayrıca bazı deneyler yaptım çünkü fonksiyon referanslarını geçmeye başladığımda sonuçları olabileceğini düşündüm, ancak o zaman bile erişim değiştirici önemli görünmüyor.
İnşa ettiğim durum şudur:
apples.B
,bla()
başvuruyu döndüren genel bir yöntem sağlarapples.A.foo
.- Daha sonra
pizzas.C
aramalarapples.B.bla
için bir başvuru elde etmek içinA.foo
ve bunu çağırır. - Bu yüzden
A.foo()
doğrudan görünmezC
, ancak yalnızca dolaylı olarakB.bla()
Test ettim ve foo()
paketin erişim değiştiricisini özel yapmam ya da yapmamam fark etmiyor.
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>
olupprivate
içindejava.util.Collections
).