I've got the following 3 tests. The first two work, the last one doesn't. My motivation for asking this question is that I'd like to be able to cast object A so that it has the same class as object B, when A is known to be a subtype of 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); } Can anyone explain why the last case fails when the first two succeed, and why this is the case? And what would be a better approach to achieve this?
Classinstead of the parameterized typeClass<>, which would be your hint that something is wrong with that declaration.