Класс полезности - Каков правильный подход?

Каков правильный подход для класса утилиты, имеющего все методы с public static.
Должен ли я использовать конечный класс или абстрактный класс?
Пожалуйста, дайте предложение.
Как например:

public final class A{ 
    public static void method(){
        /* ... */
    }
}

ИЛИ

public abstract class A{
    public static void method(){
        /* ... */
    }
}

Ответ 1

abstract имеет свою собственную цель. Если вы хотите, чтобы некоторые из функциональных возможностей класса выполнялись другими классами (override), вы используете абстрактный текст.

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

Ответ 2

Лучший подход для создания классов Utility. Если вы не хотите, чтобы другие классы наследовали его.

//final, because it not supposed to be subclassed
public final class AlertUtils 
{ 

// private constructor to avoid unnecessary instantiation of the class
    private AlertUtils() {
    }

  public static ..(){}//other methods
}

Ответ 3

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

Ответ 4

Сделайте класс окончательным и добавьте частный конструктор. (Это классы, подобные java.lang.Math)

public final class A { 
    private A() {}

    public static void method() {
    }
}

Ответ 5

если вы хотите, чтобы другие классы использовали функциональные возможности этого класса, сделайте его abstract еще сделать его Final

Ответ 6

Вот некоторые рекомендации, которые я нашел:

  • Все методы должны быть общедоступными, поэтому их нельзя переопределить.
  • Конструктор должен быть закрытым, поэтому он предотвратит создание экземпляра.
  • Конечное ключевое слово для класса предотвращает подкласс.
  • Класс не должен иметь никаких нефинальных или нестатических полей класса.

Как вы уже сказали, имя класса не может быть абстрактным (не рекомендуется) → Это означает, что вы планируете реализовать его в другом классе. Если вы хотите предотвратить подкласс, используйте final для имени класса; Если вы хотите предотвратить создание экземпляра, используйте частный конструктор.