Можно сделать очевидные вещи: ищите младший, II, III, и т.д. как суффиксы, и г-н, г-жа, Доктор, и т.д. как префиксы и удалите их, тогда первое слово является именем, последнее слово является фамилией, все промежуточное вторые имена. Кроме этого, нет никакого надежного решения для этого.
А идеальным примером является David Lee Roth (фамилия: Roth) и Eddie Van Halen (фамилия: Van Halen). Если именем Ann Marie Smith является "Ann Marie", нет никакого способа отличить это от Ann, имеющей второе имя Marie.
Внутри самого внутреннего класса вы можете использовать OuterClass.this
. Это выражение, которое позволяет ссылаться на любой лексически включающий экземпляр, описано в JLS как Qualified this
.
Я не думаю , что есть способ получить однако экземпляр извне кода внутреннего класса. Конечно, вы всегда можете ввести свое собственное свойство:
public OuterClass getOuter() {
return OuterClass.this;
}
РЕДАКТИРОВАТЬ: Поэкспериментировав, похоже, что поле, содержащее ссылку на внешний класс, имеет доступ на уровне пакета - по крайней мере, с JDK, который я использую.
РЕДАКТИРОВАТЬ: Используемое имя ( this $ 0
) действительно на Java, хотя JLS не рекомендует его использование:
механически сгенерированный исходный код или,
редко, чтобы получить доступ к уже существующим именам на
устаревшие системы.