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,则为例外。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)