В Java нет прямого эквивалента статических классов C #, но, на мой взгляд, самым близким является пустой список, который может показаться странным на первый взгляд, но имеет смысл, когда вы больше об этом думаете.Перечисление в Java (в отличие от C #), по сути, представляет собой набор одноэлементных экземпляров, которые все реализуют один и тот же абстрактный базовый класс и интерфейсы.Самый быстрый и безопасный способ создать нормальный синглтон в Java - это примерно так:
enum Foo {
INSTANCE;
public Bar doSomething(Baz baz) {
return Bar.fromBaz(baz); // yadda yadda
}
}
Так что, поскольку мы имеем дело с наборами синглетонов, имеет смысл иметь пустой набор.А пустой набор означает, что экземпляров быть не может.Концептуально это то же самое, что статический класс в C #.
enum MyUtilities {
;
static Bar doSomething(Baz baz) {
return Bar.fromBaz(baz); // yadda yadda
}
static final String SOME_CONSTANT = "QUX";
}
Это замечательно, потому что вы не потеряете покрытие тестами из-за трудностей в тестировании частных конструкторов в конечном классе, и код будет чище, чемконечный класс с пустым закрытым конструктором.
Теперь, если статические классы предназначены для всех, работающих на одном интерфейсе, и у вас есть контроль над этим интерфейсом, то вы должны реализовать статические методы на этом интерфейсе (то, что вы не можете сделать в C #).