我想在许多Java类/对象中保存大量数据,我可以这样做:
public static void main(String[] args){
System.out.println(String.valueOf(Data.Foo.bar));
System.out.println(String.valueOf(Data.Foo.array[0].bar));
}
输出:
True
False
====包含所有数据的数据类:
public class Data {
public class Base {
public boolean bar = false;
public Base[] array = {};
}
public class Foo extends Base {
this.bar = true;
this.array = {Abc};
}
public class Abc extends Base {}
}
我 NOT 想要创建这些类的实例,但我想访问类中的数据。 数据都是最终的,不会被更改,但应由另一个覆盖这些数据的对象更改。 (参见示例中的 class Foo )
我需要做些什么才能使其正常工作?
修改 Data类应该可以从整个程序的每个点访问。不应该有任何Data类的实例
修改 好吧,我将举例说明这将如何以“正常”的方式运作......
public class Data {
public Foo foo = new Foo();
public Abc abc = new Abc();
public class Base {
public boolean bar = false;
public Base[] array = {};
}
public class Foo extends Base {
this.bar = true;
this.array = {abc}; //changed to abc from Abc
}
public class Abc extends Base {}
}
我想参考Foo类和Abc Class WITHOUT 这两行:
public Foo foo = new Foo();
public Abc abc = new Abc();
答案 0 :(得分:2)
通常,在类中访问数据首先是违反封装或缺少封装。如果你正在使用面向对象的编程语言,那么这两个都不是一个好主意。
假设您确实取得了一些进展,类型检查只会让事情变得更难。
看起来非常像您熟悉不同的编程语言,并询问您如何使用Java编程语言执行常见任务。答案是,你没有。
像这样重写你的查询
public static void main(String[] args) {
System.out.println(String.valueOf(Datas.getFoo().getBar()));
System.out.println(String.valueOf(Datas.getFoo().getArray()[0].getBar()));
}
或者请考虑修复您的逻辑,使其看起来更少关于您的工作方式以及更多关于您正在做的事情。像这样
public static void main(String[] args) {
System.out.println(String.valueOf(Door.isOpen()));
System.out.println(String.valueOf(Building.getDoors().atIndex(0).isOpen()));
}
最后,类只存在于概念上,当JVM运行时,每个东西都是一个类的实例。正在运行的JVM只处理实例。如果你想避免重复实例,那很好;但是,如果你想避免处理实例,那是不可能的。尝试这样做只会导致尝试使语言表现得像一种不同的语言,无论你如何看待它都会给你带来不好的结果。
答案 1 :(得分:0)
你不想制作实例..你想在整个程序中有1个实例吗? 你是否使用线程?
我会建议你让课程静态 .. 静态引用只是整个程序中的一个,您不需要创建任何其他实例。
没有 static 字段和类的另一种方法是通过引用调用类(引用与c / c ++中的指针“相等”)。所以你将创建for示例在main方法中只有1个实例,然后在此实例上调用一些方法或任何引用..
使用 singleton 对象的好方法。 Singleton是对象编程中的设计模式之一。在那里你有100%的保证,对象将只是整个程序中的一个..Singleton是基于静态字段。所以我不认为你不需要像单身一样“硬”的东西(但它会对你有好处)了解单身人士的事情,最好只使用静态字段和静态类