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);
}