在Java

时间:2016-02-24 15:39:56

标签: java relationship

一个简单的例子: 我有三种方法[A& B& C],和他们的关系很容易。在A方法中它调用B;在B方法中,它调用C.所以,如果我在纸上画画,它看起来像:

      • C

我想让“代码”本身可以清楚地揭示这种关系,这样当我们阅读代码时,我们就可以理解“他们如何相互称呼”。而不是我们继续“寻找使用”或其他东西。

我知道这有点难,因为我们有时不能强迫[B只能被A访问]和[C只能由B访问]。 (虽然我们实际上可以通过内部类来实现,但如果只有三种方法,那么创建三个类就有点痛苦。)

我现在尝试实现这一目标的方法是让“方法名称”以某种方式揭示他们的关系。但这并不是一种真实的方法。

除了如何在Java中实现之外,其他任何编程语言都有这种功能吗?我也非常想知道该机制是如何实施的。

非常感谢任何建议或回应。

2 个答案:

答案 0 :(得分:2)

在我看来,您应该意识到为什么要将代码拆分为三种方法。

如果您可以在一个单独的类中创建这三个方法A,B,C并将B和C方法设为私有,那么这可以确保您的类外不会调用B和C.

但是如果你的目标是在课堂上制定一些限制,那么将A,B,C作为单一方法保留可能会更好,因为在Java中你不能以这种方式限制方法。

答案 1 :(得分:1)

可以创建这种关系,只将B作为参数传递给A和C作为C的参数。

这可以通过自Java 8以来的lambda表达式或者在java 8之前使用匿名类来实现。

其他系统是不可能的,因为您无法确定其他方法无法调用它。

功能语言处理得非常好。以下是使用javascript的示例:

var a = function(fn) {
    // Do something
    fn();
}

var b = function(fn) {
    // Do something
    fn();
}


var c = function() {
    // Do something
}

// To call it
a(b(c));

请注意,此解决方案在代码a(b(c))执行时定义a,b和c之间的关系

在java中,这更难做(lambda表达式之前):

public interface Command {
    public void execute();
}

public class X {
    public void a(Command comm) {
        // Do something
        comm.execute();
    }

    public void b(Command comm) {
        // Do something
        comm.execute();
    }

    public void c() {
        // Do something
    }
}


final X x = new X();
x.a(new Command() {
    public void execute() {
        x.b(new Command() {
            public void execute() {
                x.c();
            }
        });
    }
 });