В C# 6.0 появился оператор nameof()
, который возвращает строку, представляющую имя любого класса/функции/метода/локальной переменной/идентификатора свойства, помещенного в нее.
Если у меня есть такой класс:
class MyClass
{
public SomeOtherClass MyProperty { get; set; }
public void MyMethod()
{
var aLocalVariable = 12;
}
}
Я могу использовать оператор следующим образом:
// with class name:
var s = nameof(MyClass); // s == "MyClass"
// with properties:
var s = nameof(MyClass.OneProperty); // s == "OneProperty"
// with methods:
var s = nameof(MyClass.MyMethod); // s == "MyMethod"
// with local variables:
var s = nameof(aLocalVariable); // s == "aLocalVariable".
Это полезно, поскольку правильная строка проверяется во время компиляции. Если я неправильно напишу имя какого-либо свойства/метода/переменной, компилятор вернет ошибку. Кроме того, если я рефакторинг, все строки автоматически обновляются. См., например, эту документацию для реальных случаев использования.
Есть ли эквивалент этого оператора в Java? В противном случае, как я могу добиться такого же результата (или подобного)?
nameof
— это синтаксический сахар, добавленный в последнюю версию C# (6). Я почти уверен, что у Java (или большинства популярных языков в целом) не было бы эквивалента. - person Abion47   schedule 28.11.2016nameof()
:) - person Massimiliano Kraus   schedule 28.11.2016nameof()
не похоже на чистый дизайн, если это не для ведения журнала и т. д. - person f1sh   schedule 28.11.2016nameof(AffectedProperty)
соответствующему свойству объекта args события, чтобы уведомить слушателей о том, какое свойство было обновлено. Это отличный способ обеспечить безопасность имен свойств во время компиляции. - person Abion47   schedule 28.11.2016nameof
принадлежит этому языку... - person Massimiliano Kraus   schedule 28.11.2016