我正在研究一些专业编写的代码,并发现了这个片段.(我希望这个片段足以回答我的问题 - 如果不让我知道的话)
...yada yada yada ....
private ITypedElement format(final ITypedElement elementToFormat) {
try {
if (elementToFormat instanceof IStreamContentAccessor) {
final IStreamContentAccessor resNode = (IStreamContentAccessor) elementToFormat;
final InputStream contentIs = resNode.getContents();
final String contentsString = fromInputStreamToString(contentIs);
final Map options = JavaCore.getOptions();
.... etc....
Run Code Online (Sandbox Code Playgroud)
该if段仅在elementToFormat是实例的情况下运行IStreamContentAccessor.那么为什么程序在声明之后做出第一个if声明," final IStreamContentAccessor resNode = (IStreamContentAccessor)elementToFormat;"?
什么可能是某种类型的东西,它必须已经是一种类型?
程序员可能知道它是a IStreamContentAccessor,但没有强制转换,编译器不会知道它是a IStreamContentAccessor,所以它不会让程序员访问特定于IStreamContentAccessor该类的任何字段/方法.
class ClassA {
Object field1;
}
class ClassB extends ClassA
Object field2;
}
ClassA obj = new ClassB();
obj.field1; // This is fine, the compiler knows it's a ClassA
obj.field2; // This isn't allowed - as far as the compiler knows it's a ClassA, not a ClassB
((ClassB)obj).field2; // This is allowed - now the compiler knows it's a ClassB
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |