Java—选择静态还是非静态方法更好

Java—选择静态还是非静态方法更好,java,static,non-static,Java,Static,Non Static,所以我想创建一个类,在这个类中将创建一些对象,稍后我将把它们添加到地图中。将会有三张地图。Objects1的映射、Objects2的映射以及object2和Objects1之间的关系映射。就像现在我有这样的东西: public class SomeClass { private static final Map<Integer, Object1> OBJECTS1 = new HashMap<>(); private static final Map<

所以我想创建一个类,在这个类中将创建一些对象,稍后我将把它们添加到地图中。将会有三张地图。Objects1的映射、Objects2的映射以及object2和Objects1之间的关系映射。就像现在我有这样的东西:

public class SomeClass {
    private static final Map<Integer, Object1> OBJECTS1 = new HashMap<>();
    private static final Map<Integer, Object2> OBJECTS2 = new HashMap<>();
    private static final Map<Integer, List<Integer>> OBJECTS2_IN_OBJECTS1 = new HashMap<>();

    static {
        Object1 object1 = new Object1(1, "someStringForObject1");
        Object2 object2 = new Object2(1, "someStringForObject2");

        object1.setObject2(object2);
        OBJECTS1.put(object1.getId(), object1);
        OBJECTS2.put(object2.getId(), object2);

        SomeClass.addObject2ToObject1(object2.getId(), object1.getId());
    }

    public static Collection<Object1> getObjects1() {
        return OBJECTS1.values();
    }

    public static Object1 getObject1(int id) {
        return OBJECTS1.get(id);
    }

    public static void addObject1(Object1 object1) {
        OBJECTS1.put(object1.getId(), object1);
    }

    public static Collection<Object2> getObjects2() {
        return OBJECTS2.values();
    }

    public static Object2 getObject2(int id) {
        return OBJECTS2.get(id);
    }

    public static void addObject2(Object2 object2) {
        OBJECTS2.put(object2.getId(), object2);
    }

    public static void addObject2ToObject1(int object2Id, int object1Id) {
        List<Integer> objects1OfObject2 = OBJECTS2_IN_OBJECTS1.get(object2Id);
        if (objects1OfObject2 != null) {
            objects1OfObject2.add(object1Id);
            OBJECTS2_IN_OBJECTS1.put(object2Id, objects1OfObject2);
        } else {
            objects1OfObject2 = new ArrayList<>();
            objects1OfObject2.add(object1Id);
            OBJECTS2_IN_OBJECTS1.put(object2Id, objects1OfObject2);
        }
    }
}
这是我的问题。“SomeClass”中的方法应该是静态的或非静态的,因此我将在每个方法中创建“SomeClass”对象:

class SomeOtherClass{
    public Collection getObjects() {
        SomeClass someClass = new SomeClass();
        return someClass.getObjects1();
    }

    public Object1 addObject1(int idOfObject1, String someString, int idOfObject2) {
    SomeClass someClass = new SomeClass();
        if (someClass.getObject1(idOfObject1) != null) {
            System.out.prinltn("Object with this id already exists.");
            return null;
        }

        Object1 object1 = new Object1(idOfObject1, someString);
        someClass.addObject2ToObject1(idOfObject2, idOfObject1);

        someClass.addObject1(object1);
        return object1;
    }
}

通用规则是:静态是OO设计中的一个异常。它应该是异常。它会导致类之间的紧密耦合;它打得不好;无论是多态性还是单元测试

因此:只有在有充分理由这样做的情况下,才可以使用static


看一下您的示例代码,我真的不认为有任何需要或者前面提到的“好理由”可以使用static做任何事情。所以我的建议是:后退一步;然后简单地做一些阅读。喜欢或(特别是阿尔弗雷德的答案)。

一般规则是:静态是OO设计中的一个异常。它应该是异常。它会导致类之间的紧密耦合;它打得不好;无论是多态性还是单元测试

因此:只有在有充分理由这样做的情况下,才可以使用static

看一下您的示例代码,我真的不认为有任何需要或者前面提到的“好理由”可以使用static做任何事情。所以我的建议是:后退一步;然后简单地做一些阅读。喜欢或(特别是阿尔弗雷德的回答)。

潜在的重复
class SomeOtherClass{
    public Collection getObjects() {
        SomeClass someClass = new SomeClass();
        return someClass.getObjects1();
    }

    public Object1 addObject1(int idOfObject1, String someString, int idOfObject2) {
    SomeClass someClass = new SomeClass();
        if (someClass.getObject1(idOfObject1) != null) {
            System.out.prinltn("Object with this id already exists.");
            return null;
        }

        Object1 object1 = new Object1(idOfObject1, someString);
        someClass.addObject2ToObject1(idOfObject2, idOfObject1);

        someClass.addObject1(object1);
        return object1;
    }
}