Трансляция через отражение и использование Class.cast () [дубликат]

Возможный дубликат:
Java Class.cast () vs. оператор cast

Я безуспешно пытаюсь выяснить, что делает Class.cast () делать или для чего это может быть полезно, в то же время мне интересно, могу ли я каким-то образом отбросить объект через отражение.

Сначала я ошибочно подумал, что что-то вроде приведенных ниже строк могло сработать:

Object o = "A string";
String str = Class.forName("java.lang.String").cast(object);

Но без явного приведения это не работает.

Для чего нужен метод cast класса Class ? И возможно ли каким-то образом с помощью отражения преобразовывать объекты, чтобы вы нашли класс объекта, использовали для него Class.forName и каким-то образом его преобразовали?

24
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Вы можете избежать предупреждения, например, со следующим кодом:

public <T> T getObject(Class<T> type){
  Object o = getSomeObject();
  if (type.isInstance(o)){
     return type.cast(o);
  } else {
     return null;
  }
}

, а следующий код вызовет предупреждение:

public <T> T getObject(){
  return (T) getSomeObject();
}
3
ответ дан 28 November 2019 в 23:39
поделиться

Тип возврата Class.forName будет Class<? extends Object>. Вы хотите Class<? extends String>, например, используя String.class.

String str = String.class.cast(object);

Не очень полезно, пока вы не начнете заменять String каким-то типом интерфейса.

В любом случае, отражение обычно является злом.

5
ответ дан 28 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

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