gpt4 book ai didi

Java - 选择什么更好,静态方法还是非静态方法

转载 作者:行者123 更新时间:2023-12-02 03:10:00 26 4
gpt4 key购买 nike

所以我想创建一个类,在其中创建一些对象,稍后我将它们添加到 Map 中。将有三张 map 。对象 1 的映射、对象 2 的映射以及对象 2 和对象 1 之间的关系映射。就像现在我有这样的东西:

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

稍后在其他类(class)中,我想将对象添加到 map 等。只需在这些 map 上进行一些操作即可。例如:

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

public Object1 addObject1(int idOfObject1, String someString, int idOfObject2) {
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;
}
}

这是我的问题。 “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;
}
}

最佳答案

通用规则是:静态是面向对象设计中的异常。它应该是异常(exception)。它会导致类之间极度紧密耦合;玩起来不太好;既不涉及多态性,也不涉及单元测试。

因此:只有在有充分理由时才使用静态

看看你的示例代码,我真的没有看到任何需要或前面提到的“充分理由”来使用静态来做任何事情。所以我的建议是:退后一步;并简单地阅读一些内容。喜欢herethere (尤其是阿尔弗雷德的回答)。

关于Java - 选择什么更好,静态方法还是非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com