2014-12-31 3 views
0

Эй, ребята, я не вижу, что я делаю неправильно здесь. В настоящее время я следую this tutorial о том, как реализовать шаблон Singleton для проекта, и я установил некоторые тестовые файлы, чтобы узнать, будет ли это хорошо работать с тем, что я делаю, и насколько я могу судить, я следую шаблону отлично и все же я не могу получить доступ к ЛЮБОЙ из методов, это уже третий раз, когда я установил это по-разному, и поскольку это самая простая настройка, и она все еще не работает правильно, я в темноте о том, что происходит здесь. Мне просто нужно то, что я делаю неправильно, здесь указано, если это вообще возможно. Вот код:Методы Java 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(); 
} 
+0

Какие линии, в которых классы дают вам какие ошибки? – Mshnik

+0

Test.setInt (0) выдает ошибку. Независимо от того, сколько раз я пересматриваю это, он никогда не распознает методы одиночного класса – Saphiric

ответ

1

Ваша проблема заключается в том, что вызовы методов на Java должны быть в методе. Таким образом, проблема, с которой вы столкнулись, в действительности имеет мало общего с шаблоном Singleton, это то, что вы пытаетесь сделать вызов в теле класса, а не в методе. Если вы пытались собрать следующие вы бы ту же ошибку:

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

Решение вашей проблемы зависит от того, что вы пытаетесь достичь.

Если вы пытаетесь вызвать setInt(0) в момент загрузки класса класса DataCore (и 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); 
    } 
} 
+0

Так что бы создать интерфейс для использования методов Singleton, сделать вещи проще? Эти данные собираются модифицировать и получить доступ к ALOT в этом проекте, но должны быть доступны в любом месте и никогда не быть восстановлены, поэтому я смотрю на Singletons. – Saphiric

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

Ive попытался переключить его на публичный с тем же результатом. Он не признает mthods – Saphiric

+0

Какую ошибку вы получаете? –

Смежные вопросы