在 Java 中复制 C 的“friend”概念
在面向对象编程中,“friend”概念允许不同包中的类访问彼此的非公开方法。在 C 中,此功能是通过 'friend' 关键字实现的。
挑战:
在 Java 中,没有与 'friend' 概念直接等效的概念。 Java 程序员能否复制此功能以允许跨包访问非公共方法?
解决方案:
虽然 Java 没有内置的“朋友”功能,可以采用巧妙的技术来实现类似的行为。
嵌套签名安全类:
在每个目标类中创建代表共享秘密或“签名”的嵌套类。这些类对其构造函数的访问受到限制,确保只能创建授权实例。
示例:
考虑来自不同包的两个类,Romeo 和 Juliet。为了允许 Romeo 访问 Juliet 的非公共方法,Juliet 声明了一个带有私有构造函数的嵌套类 TrueLove。
// Juliet public class Juliet { private static class TrueLove {} public void cuddle(TrueLove love) { // Access to this method is restricted to Romeo through the TrueLove instance } }
限制对签名的访问:
Romeo使用公共构造函数定义自己的嵌套类 Proposal。但是,它还具有对 Juliet 的 TrueLove 类的静态引用,提供对签名的受控访问。
// Romeo public class Romeo { private static class Proposal { private static final TrueLove love = new TrueLove(); } public static void cuddleJuliet() { Juliet.cuddle(Proposal.love); } }
验证和安全:
当罗密欧调用 cuddleJuliet( ),它传递 Proposal.love 的实例,验证其访问 Juliet 的非公共方法的授权。如果任何其他类尝试直接访问 TrueLove,由于私有构造函数,它将失败,从而确保了安全性。
这种技术允许 Java 程序员通过使用嵌套类来限制对共享的访问来模拟 C 的“朋友”概念秘密并验证调用者的真实性。
以上是Java 可以模仿 C 的'朋友”概念进行跨包访问吗?的详细内容。更多信息请关注PHP中文网其他相关文章!