在Java中实现朋友概念
发布时间:2020-05-24 19:02:13 所属栏目:Java 来源:互联网
导读:参见英文答案 Is there a way to simulate the C++ ‘friend’ concept in Java?18个 如何在Java中实现朋友概念(如C)? Java没有来自C的friend关键字.然而,有一种方法可以效仿;这种方式实际上可以提供更精确的控制.假设您有A类和B类.B需要访问A中的某些
|
参见英文答案 >
Is there a way to simulate the C++ ‘friend’ concept in Java?18个
解决方法Java没有来自C的friend关键字.然而,有一种方法可以效仿;这种方式实际上可以提供更精确的控制.假设您有A类和B类.B需要访问A中的某些私有方法或字段.public class A {
private int privateInt = 31415;
public class SomePrivateMethods {
public int getSomethingPrivate() { return privateInt; }
private SomePrivateMethods() { } // no public constructor
}
public void giveKeyTo(B other) {
other.receiveKey(new SomePrivateMethods());
}
}
public class B {
private A.SomePrivateMethods key;
public void receiveKey(A.SomePrivateMethods key) {
this.key = key;
}
public void usageExample() {
A anA = new A();
// int foo = anA.privateInt; // doesn't work,not accessible
anA.giveKeyTo(this);
int fii = key.getSomethingPrivate();
System.out.println(fii);
}
}
usageExample()显示了它的工作原理. B的实例无法访问A实例的私有字段或方法.但是通过调用giveKeyTo(),B类可以获得访问权限.没有其他类可以访问该方法,因为它需要有效的B作为参数.构造函数是私有的. 然后,B类可以使用在密钥中传递给它的任何方法.虽然设置比C好友关键字更笨拙,但它更精细. A类可以准确选择哪些方法可以准确地公开哪些类. 现在,在上面的例子中,A授予对B的所有实例和B的子类实例的访问权.如果后者不合适,那么giveKeyTo()方法可以在内部用getClass()检查其他实际的类型,并抛出如果它不是精确的B则是例外. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
