Существует ли способ возвратить Анонимный Тип из метода?

if (obj instanceof C) {
//your code
}
63
задан Cleiton 25 August 2009 в 17:39
поделиться

6 ответов

Возврат его как System.Object - это единственный способ вернуть анонимный тип из метода. К сожалению, другого способа сделать это нет, поскольку анонимные типы были разработаны специально для предотвращения их использования подобным образом.

Есть некоторые уловки, которые вы можете сделать вместе с возвратом объекта , которые позволят вам чтобы приблизиться. Если вас интересует этот обходной путь, прочтите Не удается вернуть анонимный тип из метода? В самом деле? .

Заявление об ограничении ответственности: Несмотря на то, что в статье, на которую я указал, действительно показано обходное решение, это не означает, что это хорошая идея. Я настоятельно рекомендую вам использовать этот подход, поскольку создание обычного типа будет более безопасным и легким для понимания.

65
ответ дан 24 November 2019 в 16:11
поделиться

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

16
ответ дан 24 November 2019 в 16:11
поделиться

Нет, анонимные типы не могут существовать вне контекста, в котором они созданы, и в результате не могут использоваться в качестве типа, возвращаемого методом. Вы можете вернуть экземпляр как объект , но гораздо лучше явно создать свой собственный тип контейнера для этой цели.

3
ответ дан 24 November 2019 в 16:11
поделиться

Я думаю, Эндрю Хэйр прав, вам нужно просто вернуть «объект». Что касается редакционного комментария, мне кажется, что работа с необработанными объектами в объектно-ориентированном коде может быть «запахом кода». Бывают случаи, когда это правильно, но в большинстве случаев вам лучше определить интерфейс для возврата или использовать какой-либо тип базового класса, если вы собираетесь возвращать связанные типы.

3
ответ дан 24 November 2019 в 16:11
поделиться

Извините, вы действительно не должны этого делать. Вы можете обойти это с помощью отражения или создания универсального вспомогательного метода для возврата типа за вас, но это действительно работает против языка. Просто объявите тип, чтобы было понятно, что происходит.

2
ответ дан 24 November 2019 в 16:11
поделиться

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

2
ответ дан 24 November 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: