在我的C++时代被教授关于C风格演员的邪恶,我很高兴首先发现在Java 5中java.lang.Class已经获得了一种cast方法.
我认为最后我们有一个处理铸造的OO方式.
结果Class.cast与static_castC++不同.它更像是reinterpret_cast.它不会在预期的位置生成编译错误,而是会延迟到运行时.这是一个简单的测试用例,用于演示不同的行为.
package test;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class TestCast
{
static final class Foo
{
}
static class Bar
{
}
static final class BarSubclass
extends Bar
{
}
@Test
public void test ( )
{
final Foo foo = new Foo( );
final Bar bar = new Bar( );
final BarSubclass bar_subclass = new BarSubclass( );
{
final Bar bar_ref = bar;
}
{ …Run Code Online (Sandbox Code Playgroud)