David Crow Ответов: 2

Переопределение оператора присваивания


Существует ли такая вещь на Яве? Например, я всегда могу сделать что-то вроде:

AJSDate startDate = new AJSDate("20090811");
но я бы предпочел, чтобы он был как:

AJSDate startDate = "20090811";


2 Ответов

Рейтинг:
2

Error410

Java на самом деле не работает так, как Javascript, хотя недавние изменения, внесенные Java 10 и выводом типа локальной переменной, могут немного помочь в этом. До Java 10 объекты были специально определены (Ах да, даже после Java 10) и интерпретированы, так что когда у вас есть

AJSDate startDate = new AJSDate("20090811");


.. он сообщает JVM, что вы хотите, чтобы объект типа AJSDate был сгенерирован с этим конкретным строковым объектом, введенным в предоставленный конструктор (я предполагаю, что вы).

С Java 10, когда у вас есть локальные переменные, вы, однако, можете иметь что-то вроде этого (вывод типа локальной переменной):

общественного недействительными метода someMethod() {
var startDate = new AJSDate("20090811");
}

Метод Java 10, использующий var, действительно близок к тому, как иногда ведет себя Javascript, но не полностью. Безопасность приложения в значительной степени зависит от безопасности типов. Имея что-то вроде этого:

AJSDate startDate = "20090811";


Это было бы в значительной степени из-за ошибки, потому что вы хотели бы приравнять два разных типа объектов.


Dave Kreskowiak

Неужели? Спросили и приняли ответ девять лет назад.

Рейтинг:
16

David Skelly

Нет, вы не можете сделать это на Java. Это был сознательный выбор Гослинга и др. поскольку одной из их первоначальных целей дизайна языка была простота и прозрачность: вы всегда должны знать, что делает код, просто глядя на него, без каких-либо "скрытых" эффектов. ("Простота" и Java, о, как изменился мир.)
Что вы можете сделать, так это настроить статический заводской метод, что-то вроде:

AJSDate startDate = AJSDate.valueOf("200090811");


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