有没有一种方法可以模拟Java中的C ++“朋友”概念?

有没有一种方法可以模拟Java中的C ++“朋友”概念?,第1张

有没有一种方法可以模拟Java中的C ++“朋友”概念?

这是我在JAVA中用来复制

C ++
朋友机制的一个小技巧。

可以说我有一节课

Romeo
和另外一节课
Juliet
。由于仇恨原因,他们处于不同的包裹(家庭)中。

Romeo
想要
cuddle Juliet
并且
Juliet
只想让
Romeo cuddle
她。

C ++
中,
Juliet
将声明Romeo为(情人),friend但是在Java中没有这样的东西。

这是类和技巧:

女士优先 :

package capulet;import montague.Romeo;public class Juliet {    public static void cuddle(Romeo.Love love) {        Objects.requireNonNull(love);        System.out.println("O Romeo, Romeo, wherefore art thou Romeo?");    }}

所以方法Juliet.cuddle是,public但是你需要Romeo.Love调用它。它使用此方法Romeo.Love作为“签名安全性”,以确保只能Romeo调用此方法并检查爱情是否真实,这样运行时将抛出a NullPointerException如果是null。

现在男孩:

package montague;import capulet.Juliet;public class Romeo {    public static final class Love { private Love() {} }    private static final Love love = new Love();    public static void cuddleJuliet() {        Juliet.cuddle(love);    }}

该类

Romeo.Love
public
,但是其构造函数是
private
。因此,任何人都可以看到它,但只能Romeo构造它。我使用静态引用,因此
Romeo.Love
从未使用过的引用只会被构建一次,并且不会影响优化。

因此,

Romeo
只能
cuddle Juliet
并且只能他可以,因为只有他可以构造和访问Romeo.Love实例,这
Juliet
cuddle
她是必需的(否则她会给你打一个NullPointerException)。



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

原文地址: https://outofmemory.cn/zaji/5059192.html

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

发表评论

登录后才能评论

评论列表(0条)

保存