在我的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) 查看一些代码,我遇到了以下代码
trTuDocPackTypdBd.update(TrTuDocPackTypeDto.class.cast(packDto));
Run Code Online (Sandbox Code Playgroud)
我想知道这种方式是否有任何优势
trTuDocPackTypdBd.update((TrTuDocPackTypeDto)packDto);
Run Code Online (Sandbox Code Playgroud)
我问开发人员负责,他说他使用它是因为它是新的(这对我来说似乎不是一个特别好的理由),但是当我想要使用这种方法时我很感兴趣.