У меня есть следующие 3 теста. Первые две работы, а последняя - нет. Моей мотивацией для этого вопроса является то, что я хотел бы использовать объект A
, чтобы он имел тот же класс, что и объект B
, когда A
известен подтипом B
.
@Test
public void testWorks() {
Object bar = "foobar";
String blah = (String) bar;
System.out.println(blah); // Outputs foobar
}
@Test
public void testAlsoWorks() {
Object bar = "helloworld";
String blah = String.class.cast(bar);
System.out.println(blah); // Outputs helloworld
}
@Test
public void testfails() {
Object bar = "foobar";
String thetype = "hello";
Class stringclass = thetype.getClass();
String blah = stringclass.cast(bar); // Compiler error: incompatible types: Object cannot be converted to String
System.out.println(blah);
}
Может ли кто-нибудь объяснить, почему последний случай терпит неудачу, когда первые два успеха, и почему это так? И что было бы лучшим подходом к достижению этого?