interface I{}
class A implements I{}
class B{}
Run Code Online (Sandbox Code Playgroud)
第一:
I[] arr = new A[10];
arr[0] = (I) new B(); // will produce ClassCastException at runtime
Run Code Online (Sandbox Code Playgroud)
第二:其中如果我使用具体的课程
I[] arr = new A[10];
arr[0] = (A) new B(); // will produce compile-time error
Run Code Online (Sandbox Code Playgroud)
如果在我的第一个例子中,(I) new B()
java编译器也应该产生编译错误,那有什么区别?
是不是java编译器应该能够区分它也是一个"不可转换的类型"?特别是当新的操作员马上到来时?
是否有任何实例/机会可能创建B的新实例可以生成类型I的可转换类型?
我知道在某些时候,Java编译器不应该立即说它是编译器错误,就像你这样做:
I i = (I) getContent(); // wherein getContent() will return a type of Object
Run Code Online (Sandbox Code Playgroud)
编辑:
让我澄清一下这个问题为什么它不可能重复:将已知类型的引用转换为类型层次结构之外的接口
这个问题的目的不是因为我不知道会有什么结果或什么是错的东西等等.
我只是想知道"技术方面更详细的解释",为什么JVM会采用这种方式行事,或者为什么Java想出了那种不使这种情况成为编译时错误的决定.
众所周知,在编译时而不是在运行时找到"有问题的代码"总是更好.
另一件事,我正在寻找的答案是在这个线程上找到的而不是那些"重复?".
我正在开发一个应用程序,旨在从系统中恢复已删除的文件(包括回收站中的文件和已从回收站中清空但仍可理解的文件)和格式化的驱动器.我决定用c#作为语言,但是我很难找到解决这个问题的类.有没有人知道任何用于查找已删除文件,检索它们或任何教程或帮助解决此问题的类/方法.我对这个问题没什么经验,所以任何帮助都会受到强烈赞赏.