ว่าฉันมีชั้นเรียนที่มีสมาชิกบางคนและสมาชิกมีตัวดัดแปลงการเข้าถึงที่ จำกัด น้อยกว่าชั้นเรียน
ตัวอย่างที่เป็นรูปธรรมอาจเป็น:
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
)