Java Singleton方法不起作用

时间:2014-12-31 04:54:10

标签: java singleton logic

嘿伙计们,我不知道我在这里做错了什么。我目前正在关注如何为项目实现Singleton Pattern的this tutorial,我设置了一些测试文件,看看它是否能很好地解决我正在做的事情,据我所知,我是完美地遵循模式,但我似乎无法访问任何方法,这是我第三次以各种方式设置它,因为这是最简单的设置,它仍然无法正常工作,我我是在黑暗中发生在这里的。我只是需要我在这里做错了,如果可能的话。这是代码:

DCTest.java(Singleton类)

package com.saphiric.simproject.datacontrols;

/**
 * Created by Saphiric on 12/30/14.
 */
public class DCTest {

    // Singleton Test
    private static DCTest dct = new DCTest();

    private DCTest(){
        // Prevents outside instantiation
    }

    public static DCTest getInstance(){
        return dct;
    }

    // test variables for making sure it can have dynamic fields
    private int INT;

    protected void setInt(int newInt){
        INT = newInt;
    }

    protected int getINT(){
        return INT;
    }
}

DataCore.java(我想访问Singleton类的文件)

package com.saphiric.simproject.datacontrols;

/**
 * Created by Saphiric on 12/29/14.
 */
public class DataCore {

    // Singletons Tests
    DCTest test = DCTest.getInstance();
    test.setInt(0);

    public DataController data = new DataController();
    public DecisionLocks locks = new DecisionLocks();
}

2 个答案:

答案 0 :(得分:1)

您的问题是Java中的方法调用必须在方法中。所以你所拥有的问题实际上与Singleton模式几乎没有关系,那就是你试图在类的主体中进行调用,而不是方法。如果您尝试编译以下内容,则会出现相同的错误:

public class HelloWorld{
    System.out.println("Hello, World!"); //Err
}

问题的解决方案取决于您要完成的任务。

如果您尝试在DataCore类的类加载时调用setInt(0)(并且test应该是静态字段),请使用静态初始化程序(只是单词{{ 1}}而不是方法标题)。

static

或者,如果字段public class DataCore { // Singletons Tests - static static DCTest test; //Called when the DataCore class is loaded. static{ test = DCTest.getInstance(); test.setInt(0); } } 实际上应该是非静态的,只需将setInt调用放在构造函数中:

test

答案 1 :(得分:-1)

DataCore类的代码包含在方法中。

public class DataCore {

    // Singletons Tests
    public void work () {                        // added code in this method.
        DCTest test = DCTest.getInstance();
        test.setInt(0);

        public DataController data = new DataController();
        public DecisionLocks locks = new DecisionLocks();
    }
}