Могу ли я сделать приведение классов в Java с использованием методов?

1

Поэтому мне это не нравится по некоторым причинам:

((Foo) list.get(0)).getBar();

Можно ли сделать что-то вроде этого:

list.get(0).castTo(Foo.class).getBar();

Благодарю.

  • 2
    Почему вам не нравится первое (кроме проблемы, заключающейся в том, что приоритет всегда заставляет задуматься о добавлении extra () )?
  • 0
    @HotLicks Я думаю, что это нарушает представление и сильно замедляет печать.
Показать ещё 6 комментариев
Теги:
casting

2 ответа

2
Лучший ответ

Вы можете использовать class.cast(Object). Прочитайте Java Class.cast() против оператора трансляции.

Foo.class.cast(list.get(0)).getBar();

Однако я предлагаю вам использовать переменную.

Foo foo = (Foo)list.get(0);
Bar bar = foo.getBar();
  • 1
    То, что вы можете использовать это, не означает, что вы должны .
3

У вас есть Class.cast(Object obj); метод. Но было бы глупо использовать вместо обычного, просто потому, что вам это не нравится.

Это также дополнительный вызов метода вместо конструкции времени компиляции, поэтому они не являются непосредственно эквивалентными друг другу.

Не говоря уже о том, что 6ton уже упоминал в комментариях, что пример можно избежать с помощью дженериков...

  • 0
    Какова разумная причина использовать его?
  • 1
    Когда вы работаете с большим количеством размышлений и дженериков. Так довольно редко.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню