-1

我想在许多 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 {}
}

不想创建这些类的实例,但我想访问类中的数据。数据都是最终的,不会更改,但应该由覆盖这些数据的另一个对象更改。(参见示例中的Foo 类

我必须做些什么才能使其正常工作?

编辑: 数据类应该可以从整个程序中的每个点访问。不应存在​​ 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

    public Foo foo = new Foo();
    public Abc abc = new Abc();
4

2 回答 2

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 只处理实例。如果您想避免重复实例,那很好;但是,如果你想避免处理实例,那是不可能的。尝试这样做只会导致试图使该语言表现得像另一种语言,无论您如何看待它都会给您带来不好的结果。

于 2012-09-10T16:48:23.573 回答
0

嗯,我不知道我是否理解你的问题,但是..

你不想创建实例..你想在整个程序中有 1 个实例?您是否使用线程?

我建议您将类设为静态。静态引用只是整个程序中的一个,您不需要创建任何其他实例。

没有静态字段和类的另一种方法是通过引用调用类(引用与 c/c++ 中的指针“相等”)..因此,您将在 main 方法中仅创建一个实例,然后调用一些方法或任何带有引用的方法这个例子。。

好的方法是使用单例对象。单例是对象编程中的一种设计模式。在那里你有 100% 的保证,该对象将只是整个程序中的一个..单例是基于静态字段的..所以我认为你不需要像单例这样“硬”的东西(但这对你有好处了解一些关于单例的东西),最好只使用静态字段和静态类

于 2012-09-10T16:44:18.473 回答