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