2015-03-02 3 views
0

У меня есть класс, похожий на приведенный ниже со всеми статическими методами. Следовательно, класс не был инициализирован при использовании в других классах. Я должен проверить условие перед вызовом каких-либо статических методов из этого класса. Даже если я добавлю конструктор по умолчанию, он не будет вызван. Может ли кто-нибудь предложить идеи для решения без создания экземпляра этого класса во всех его обычаях? Нужно, чтобы конструктор по умолчанию мог быть простым другим решением.Конструктор Java по умолчанию без инициализации

Перед выполнением вызова мне нужно проверить каждый раз подключение к сети. Статический инициализатор вызывается только в первый раз при загрузке.

 public class ABCServerUtil { 

     public static boolean checkServer() {...bla...bla...} 


     } 

Мне нужна какая-то вещь, например, под кусочком кода, который вызывается и должен быть выведен.

 public ABCServerUtil(){ 
     if(!isNetworkOnline()) 
     return; 
     } 
+2

** Следовательно, класс не был инициализирован при использовании в других классах.** - Откуда вы знаете, что он не получил * инициализирован *? У вас нет статических блоков инициализатора. И, пожалуйста, подробно объясните, что происходит, а что нет. :) – TheLostMind

+0

То, что вы описываете, не является объектом и, следовательно, не нуждается в конструкторе. Вы определяете статическое поведение и, следовательно, должны программировать его как таковое. – Jared

ответ

1

Использование статической инициализации блок

static { 
    //whatever code for initialization 
} 
  • Класс может иметь любое количество статических блоков инициализации
  • они могут появляться в любом месте тела класса
  • статические блоки инициализации вызываются в порядке что они появляются в исходном коде.

Вы должны вызываться каждый раз, когда метод, называемый

public class Test { 

    public static void checkServer() { 
     if (!checkNetwork()) { 
      return; 
     } 
    } 

    public static void checkClient() { 
     if (!checkNetwork()) { 
      return; 
     } 
    } 

    private static boolean checkNetwork() { 
     return true; // or false depending on network condition 
    } 
} 
+0

Ок. После редактирования OP этот ответ неверен *. – TheLostMind

+0

@ TheLostMind Я не видел, что вопрос был отредактирован? –

+0

Это было отредактировано за 5 минут до того, как вы отправили свой ответ .. :) – TheLostMind

0

Вы можете использовать статический инициализатор.

static { 
    // code here 
} 

Он будет запущен до того, как будет получен доступ к любому методу свойства (статического или иного) класса.

2

Если вам нужно проверить условие каждый раз, когда вызывается один из статических методов, у вас нет выбора, кроме как сделать то, что вы делаете: вызвать метод для проверки в начале каждый из этих методов.

Если вам нужно только проверить состояние раз когда класс изначально загружена/инициализирован, вы можете использовать static initializer:

public class ABCServerUtil { 

    static { 
     // Code here runs when the class is loaded 
    } 

    // ... 
} 
+0

* Если вам нужно проверить условие каждый раз, когда вызывается один из статических методов, * - он мог использовать прокси для вызова всех своих методов здесь: P – TheLostMind

0

вы можете непосредственно вызвать статический метод с именем класса, как это ,

boolean val=ABCServerUtil.checkServer(); 

некоторые учебник дается here

-1

Я думаю, что это ваш Solut ion: Static initializer in Java

На практике вам понадобится блок кода, выполняемый при первом загрузке вашего класса.

0

Поскольку существует уже 5 ответов говорят то же самое, и ни один из них, кажется, что вы после:

Инструмент, как Byte Buddy звучит так, как вам нужно.

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