Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 收集手势类_Java - Fatal编程技术网

Java 收集手势类

Java 收集手势类,java,Java,我的应用程序中定期加载一些对象。为了快速地访问它们、对它们进行排序以及更多,我将它们存储在一个集合中 我的问题是,因为这个集合不属于我当前的任何类,所以我创建了它自己的最终类,只是为了存储和管理它,使用私有构造函数和静态方法和属性 public class MyObject { //stuff } public final class LisOfMyObject { private static ArrayList<MyObject> myObjects = new

我的应用程序中定期加载一些对象。为了快速地访问它们、对它们进行排序以及更多,我将它们存储在一个集合中

我的问题是,因为这个集合不属于我当前的任何类,所以我创建了它自己的最终类,只是为了存储和管理它,使用私有构造函数和静态方法和属性

public class MyObject {
    //stuff
}

public final class LisOfMyObject {
    private static ArrayList<MyObject> myObjects = new ArrayList<MyObject>();
    private LisOfMyObject {}

    private static void addObject(MyObject object) {
         //stuff
    }
    private static boolean isInList(MyObject object) {
        //stuff
    }
    // etc...
}
公共类MyObject{
//东西
}
公共最终类LisOfMyObject{
私有静态ArrayList myObjects=new ArrayList();
私有LisOfMyObject{}
私有静态void addObject(MyObject对象){
//东西
}
私有静态布尔isInList(MyObject对象){
//东西
}
//等等。。。
}

我对完全静态的方法和属性感到不舒服。这叫什么?静态类?静态单例?

如果要将此类转换为单例,可以将其更改为:

public final class LisOfMyObject {

    private static LisOfMyObject _instance;
    private ArrayList<MyObject> myObjects = new ArrayList<MyObject>();

    private LisOfMyObject {}

    public LisOfMyObject instance() {
        if (_instance == null)
            _instance = new LisOfMyObject();
        return LisOfMyObject;
    }

    private void addObject(MyObject object) {
         //stuff
    }
    private boolean isInList(MyObject object) {
        //stuff
    }
    // etc...
}

就我个人而言,我更喜欢这种类型的类,因为它不需要将所有内容声明为静态。

如果您只想键入较少的内容,则可以使用,然后可以调用静态方法,而无需在它们前面写
LisOfMyObject。

import static LisOfMyObject.*;

class SomeClass {
  public void doWeirdStuff() {
    ...
    MyObject something=...
    if(!isInList(something)) {
      addObject(something);
    }

然而,使用这种魔力会使代码更难理解(当然不是对编译器,而是对人类而言)。

没有最佳实践。立即消除这种误解。你能解释一下这个问题中你所说的“手势”是什么意思吗?我不确定这是一个翻译错误还是一些我不知道的术语。@erickson translation error那不是一个真正的单身汉。我没有任何非静态方法,所以我永远不需要实例化它。不需要静态声明,它只是每个方法的逻辑声明。我的意思是,它不是我想要存储或引用的对象,它只是一个utils方法列表。@JulienMaret a singleton只是一个只实例化一次的类。您肯定不需要使用非静态方法,而且这不是实现代码的唯一方法(您的方法也很好),这只是为了展示另一种方法possibilty@AndyTurner这是一个完全公平的评论。你说得对,这不是线程安全的。我没有添加任何同步,因为问题中没有提到,我想保留示例basicOk,谢谢。我的答案是无国籍的单身汉。我将对它进行预实例化,因为每次执行时都需要一个实例,这样可以保证线程安全
import static LisOfMyObject.*;

class SomeClass {
  public void doWeirdStuff() {
    ...
    MyObject something=...
    if(!isInList(something)) {
      addObject(something);
    }