Вы не можете делать то, что вы хотите ... по крайней мере, не так. Компилятор удалил всю информацию, поэтому в результате вы получили (T) Object, и это работает.
Проблема в том, что позже вы делаете объект MyClass = (String); и это не разрешено.
Вы обошли проверку компиляторов и вывели ее из строя во время выполнения.
Так что именно вы пытаетесь сделать? Если вы сообщите нам, почему вы хотите это сделать, мы, вероятно, расскажем вам, как это сделать на Java.
Учитывая ваш комментарий, вы можете попробовать что-то вроде:
public class Main
{
public static void main(String[] args)
{
String a;
MyClass b;
a = staticCast(new String("B"), String.class);
b = staticCast(new String("B"), MyClass.class);
System.out.println(a);
}
public static class MyClass
{
}
public static <T> T staticCast(Object arg, final Class clazz)
{
// edit - oops forgot to deal with null...
if(arg == null)
{
return (null);
}
// the call to Class.cast, as mmeyer did, might be better... probably is better...
if(arg.getClass() != clazz)
{
// Given your answer to Ben S...
return (null);
// throw new ClassCastException("cannot cast a " + arg.getClass() + " to a " + clazz);
}
return ((T)arg);
}
}