首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -有什么更好的选择,静态或非静态方法

Java -有什么更好的选择,静态或非静态方法
EN

Stack Overflow用户
提问于 2016-12-16 19:43:53
回答 1查看 265关注 0票数 0

因此,我想要创建类,在其中创建几个对象,然后将它们添加到Map中。会有三张地图。Objects1地图、Objects2地图和object2与objects1关系图。就像现在我有这样的东西:

代码语言:javascript
运行
复制
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);
        }
    }
}

在其他类中,例如,添加对象到映射等,只需对这些映射进行一些操作。例如:

代码语言:javascript
运行
复制
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”对象:

代码语言:javascript
运行
复制
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;
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2016-12-16 19:49:46

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

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

看一下您的示例代码,我真的没有看到任何使用静态操作的需要或上述“好的理由”。所以我的建议是:退一步,简单地读一读。如herethere (尤指)。阿尔弗雷德的回答)。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41191455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档