一个简单的例子: 我有三种方法[A& B& C],和他们的关系很容易。在A方法中它调用B;在B方法中,它调用C.所以,如果我在纸上画画,它看起来像:
我想让“代码”本身可以清楚地揭示这种关系,这样当我们阅读代码时,我们就可以理解“他们如何相互称呼”。而不是我们继续“寻找使用”或其他东西。
我知道这有点难,因为我们有时不能强迫[B只能被A访问]和[C只能由B访问]。 (虽然我们实际上可以通过内部类来实现,但如果只有三种方法,那么创建三个类就有点痛苦。)
我现在尝试实现这一目标的方法是让“方法名称”以某种方式揭示他们的关系。但这并不是一种真实的方法。
除了如何在Java中实现之外,其他任何编程语言都有这种功能吗?我也非常想知道该机制是如何实施的。
非常感谢任何建议或回应。
答案 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();
}
});
}
});