Могу ли я сделать служебный метод статическим? - PullRequest
4 голосов
/ 14 июля 2011

У меня есть некоторые функции, такие как:

  1. Функция, которая принимает входные данные для строки, изменяет и возвращает строку

  2. Функция, которая принимает строку(содержит XML) в качестве входных данных, анализирует его и возвращает объект.

Например:

public class MyUtils{

    public static modifyString(String str){
        return someString;
    }

    public MyObject parseString(String xml){
        //Parse XML
        return obj;
    }
}
  1. Могу ли я сделать такие функции статическими, чтобыКто-нибудь может использовать их, не создавая экземпляр моего класса?
  2. Что если два потока вызывают функцию одновременно?Является ли код потокобезопасным?Если да / нет, то как?
  3. Когда следует использовать одноэлементный объект и когда использовать статические методы?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011
  1. Да, просто добавьте ключевое слово static.Используя приведенный вами пример, вы можете вызвать modifyString следующим образом:

    MyUtils.modifyString ("Некоторые строковые данные");

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

  3. Ониэто разные вещи, вы должны использовать синглтон, когда вам нужно использовать данные экземпляра, то есть когда вам нужно, чтобы у вашего класса были атрибуты или состояние.Для утилитарных функций лучшим вариантом часто является использование статических методов, поскольку у вас меньше шансов связать состояние с утилитарной функцией.

0 голосов
/ 14 июля 2011
  1. Да, вы можете сделать эти методы статическими. На самом деле эти «служебные классы» обычно создаются статическими методами.

  2. Нет, эти методы не являются поточно-ориентированными, поток может прервать выполнение метода и изменить значение, над которым в данный момент работал.

  3. Вы должны использовать синглтон, когда вам нужен только один экземпляр класса. Хорошим примером является класс журналирования, который регистрирует информацию о выполнении вашей программы. В этом случае не имеет смысла использовать синглтон, потому что вы будете использовать статические методы.

0 голосов
/ 14 июля 2011
  1. Да, вы должны.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...