Мое рабочее место экспериментировало при переходе с Java на Scala для некоторых задач, и оно хорошо работает для того, что мы делаем. Однако некоторые существующие методы ведения журнала ожидают a java.lang.Enum
. Метод ведения журнала определен в базовом классе (Java), и подклассы могут определять свои собственные перечисления, которые логгер будет отслеживать по всем экземплярам в нескольких потоках/машинах.
В Java это работает так:
public class JavaSubClass extends JavaBaseClass {
enum Counters {
BAD_THING,
GOOD_THING
}
public void someDistributedTask() {
// some work here
if(terribleThing) {
loggingMethod(Counters.BAD_THING)
} else {
loggingMethod(Counters.GOOD_THING)
// more work here
}
}
}
Затем, когда задача завершена, мы видим, что
BAD_THING: 230
GOOD_THING: 10345
Есть ли способ реплицировать это в Scala, создав Java Enum
или преобразовать из Enumeration
в Enum
? Я попытался расширить Enum
напрямую, но он кажется запечатанным, поскольку я получаю ошибку в консоли:
error: constructor Enum in class Enum cannot be accessed in object $iw
Access to protected constructor Enum not permitted because
enclosing object $iw is not a subclass of
class Enum in package lang where target is defined