2016-07-14 3 views
3

У меня есть класс, который должен работать как утилита. Мне не нужен его экземпляр, все, что он содержит, - это static и static. Итак, что лучший способ сделать это? Сделать это final с private конструктором как Math класс в java или просто сделать его конструктор private без его создания final?Лучший способ сделать класс в качестве утилиты?

+0

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

+0

, если он не является окончательным, но имеет частный ctor, он все равно может быть подклассифицирован внутренним статическим классом. Имея это как окончательный, так и частный ctor, облегчает чтение читателю цели, поэтому я бы сделал это. – flakes

+0

несколько дубликат: http://stackoverflow.com/questions/309553/should-helper-utility-classes-be-abstract и http://stackoverflow.com/questions/12538487/utility-class-what-is- правильный подход и http://stackoverflow.com/questions/25223553/how-can-i-create-an-utility-class – alexbt

ответ

1

private конструктор достаточно, нет необходимости, чтобы отметить класс final, по имея частный конструктор, мы не можем подклассифицировать его

Если вы сделаете конструктор private, вы все равно можете получить к нему доступ, используя reflection.

Лучше подход бросить AssertionError

public class Util {  
    private Util() { 
     throw new AssertionError("Can't instantiate"); 
    } 
    // static methods 
} 

Ниже код для создания экземпляра закрытый конструктор

public class Test { 
    public static void main(String[] args) { 
     try { 
      Constructor<Util> utilC = Util.class.getDeclaredConstructor(); 
      utilC.setAccessible(true); 
      Util u = utilC.newInstance(); // instance   
     } catch (Exception e) { 
      // exception handling 
     } 
    } 
} 
0

для класса Util, вам не нужно предоставлять constructor.because эти функции являются статическими, вы можете использовать, как это: Util.a()

+1

Я уверен, что он знает преимущества статических методов. Он задается вопросом, должен ли он сделать класс абстрактным или окончательным или не финальным с помощью частного конструктора. Он в основном спрашивает, какой из них считается лучшей практикой. – alexbt

+0

thanks.in мой взгляд, если класс предоставляет только статические методы, лучше использовать частный конструктор – Melody4java

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