【发布时间】:2014-04-25 12:44:58
【问题描述】:
我有一个主类,它有许多其他类中经常需要的与实例相关的方法,我经常发现自己在构造函数中传递了一个主类的实例。我经常发现这涉及到具有主类实例的类的多层深度,这些实例已经从一个实例复制到另一个实例,我无法想象这对内存使用有好处。
有没有一种方法可以做到这一点,而不必在构造函数或方法中传递实例,或者至少有一种方法可以减少主类实例使用的内存。
为了明确我不是在寻找静态方法,它被设计为能够拥有多个主类的实例。
示例代码:
public class Main {
public Main() {
Class2 class2 = new Class2(this);
}
public void someMethod() {
//Do something
}
}
public class Class2 {
private final Main instance;
public Class2(Main instance) {
this.instance = instance;
Class3 class3 = new Class3(instance);
}
}
public class Class3 {
private final Main instance;
public Class3(Main instance) {
this.instance = instance;
instance.someMethod();
}
}
【问题讨论】:
-
您意识到这些字段仅使用 32/64 位内存,因为它们只是对您的实例的引用,对吧?所以,这里实际上并没有“内存问题”。
-
果汁?春天?依赖注入——解耦是关键!!如果有人告诉您将方法设为静态或做任何其他事情以使您的代码不符合 OOP,请帮自己一个忙,然后忽略它们。
-
@HovercraftFullOfEels 并不是说您在这个特定示例中错了,但这是普遍的真理吗?静态实用程序方法有问题吗?
-
@ElliottFrisch:不,你是对的,实用方法应该是静态的。但是在没有提到这些实用方法的情况下使用静态作为一个广泛的答案是错误的。
-
类的名称“Main”强烈建议在应用程序中不需要有多个类的实例或其数据的副本。如果您不需要多个实例,则静态方法或单例是合适的解决方案。