У нас есть приложение javascript, которое подключается к услуге java. В нашем внешнем приложении мы пытаемся выровнять все константы с объявлениями на стороне сервиса (перечисления в этом формате: UPPER_SNAKE_CASE), но часто нам нужно отформатировать константы в других случаях (начальный регистр, camelCase и т. Д. c
Чтобы сделать использование констант и их объявления более последовательными, в настоящее время у нас есть настройка, которая выглядит примерно так
// Class definition
export default class BaseEnum {
constructor (obj) {
const { varName } = obj;
this.snakeCase = obj.snakeCase Case ? obj.snakeCase : lodash.snakeCase(obj.varName);
this.camelCase = obj.camelCase ? obj.camelCase : lodash.camelCase(obj.varName);
this.text = obj.text ? obj.text : lodash.startCase(lodash.lowerCase(obj.varName));
this.upperSnakeCase = obj.upperSnakeCase ? obj.upperSnakeCase : lodash.upperCase(obj.varName).replace(/ /g, '_');
// ... other formats etc
}
}
// Declaring a enum class
export const SUNNY_DAY = new BaseEnum({
varName: 'SUNNY_DAY',
camelCase: 'sunnyDay', // if for some reason we want to override the camelCase, we do it here; camelCase: 'sunny'
text: 'Today is a sunny day',
upperSnakeCase: undefined // if left out, the class will generate the upperSnakeCase format
});
// In use
console.log(SUNNY_DAY.snakeCase);
console.log(SUNNY_DAY.camelCase); // ... etc
Однако большую часть времени мы обращаемся к Формат UPPER_SNAKE_CASE, так что в итоге мы получаем его разбросанный повсюду
console.log(SUNNY_DAY.upperSnakeCase);
Есть ли способ сопоставить c внутреннюю Java toString magi c в Javascript?
public enum SunnyDay {
SNAKE_CASE('SUNNY_DAY'),
CAMEL_CASE('sunnyDay'),
TEXT('Today is a sunny day')
private String description;
public SunnyDay(String description) { this.description = description; }
public String description() { return this.description; }
// other overrides
}
Вопрос: есть ли способ использовать его описанным ниже способом, похожим на Java?
console.log(SUNNY_DAY); // default prints 'SUNNY_DAY', instead of the object
sout(SunnyDay.SNAKE_CASE); // 'SUNNY_DAY'
Я попытался переопределить прототип toString , но для этого также требуется вызов SUNNY_DAY.toString (), который выглядит примерно так же, как вызов SUNNY_DAY.upperSnakeCase. Я не могу придумать, как использовать Javascript для того, что Java делает за сценой с его версией toString ();
Я также пытался создать какой-то абстрактный класс для расширения, но безрезультатно.
Есть идеи? Возможно ли это вообще?