大家好,我在这里看不到我做错了什么。我目前正在跟踪this tutorial如何为项目实施Singleton模式,并设置了一些测试文件以查看它是否可以很好地满足我的工作,据我所知,我正在遵循模式完美,但我似乎无法访问任何方法,这是我第三次以各种方式进行设置,这是最简单的设置,但仍然无法正常工作,我处于在这里发生了什么事的黑暗。如果可能的话,我只需要指出我在做错什么。这是代码:

DCTest.java(单例类)

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

最佳答案

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

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


解决问题的方法取决于您要完成的工作。

如果您试图在DataCore类的类加载时调用setInt(0)(并且test应该是静态字段),请使用静态初始化程序(只是单词static而不是方法标头)对于该声明。

public class DataCore {

    // Singletons Tests - static
    static DCTest test;

    //Called when the DataCore class is loaded.
    static{
        test = DCTest.getInstance();
        test.setInt(0);
    }
}


另外,如果字段test实际上应该是非静态的,则只需将setInt调用放在构造函数中:

public class DataCore {

    // Singletons Tests - nonstatic
    DCTest test;

    public DataCore(){
        test = DCTest.getInstance();
        test.setInt(0);
    }
}

07-24 09:38
查看更多