Java Class.cast() vs. cast operator
2022-08-31 09:02:28
在我C++的日子里,我被教导了C型强制转换运算符的邪恶,起初我很高兴地发现Java 5已经获得了一种方法。java.lang.Class
cast
我以为我们终于有了处理选角的OO方式。
事实证明,这与C++年不同。它更像是.它不会在预期位置生成编译错误,而是会推迟到运行时。下面是一个简单的测试用例,用于演示不同的行为。Class.cast
static_cast
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;
}
{
// Compilation error
final Bar bar_ref = foo;
}
{
// Compilation error
final Bar bar_ref = (Bar) foo;
}
try
{
// !!! Compiles fine, runtime exception
Bar.class.cast( foo );
}
catch ( final ClassCastException ex )
{
assertTrue( true );
}
{
final Bar bar_ref = bar_subclass;
}
try
{
// Compiles fine, runtime exception, equivalent of C++ dynamic_cast
final BarSubclass bar_subclass_ref = (BarSubclass) bar;
}
catch ( final ClassCastException ex )
{
assertTrue( true );
}
}
}
所以,这些是我的问题。
- 应该被放逐到仿制药的土地吗?在那里,它有相当多的合法用途。
Class.cast()
- 编译器在使用时是否应该生成编译错误,并且在编译时可以确定非法条件?
Class.cast()
- Java是否应该提供一个强制转换运算符作为类似于C++的语言构造?