Java中Friend概念的实现

Java中Friend概念的实现,第1张

Java中Friend概念的实现

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,则为例外。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5429699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存