Java casting dans les interfaces

Quelqu'un peut-il m'expliquer comment le compilateur ne se plaint pas de la première coulée, mais ne se plaignent dans le deuxième?

interface I1 { }
interface I2 { }
class C1 implements I1 { }
class C2 implements I2 { }

public class Test{
     public static void main(){
        C1 o1 = new C1();
        C2 o2 = new C2();
        Integer o3 = new Integer(4);

        I2 x = (I2)o1; //compiler does not complain
        I2 y = (I2)o3; //compiler complains here !!
     }
}
  • Par l'exécution de cette, vous rencontrerez ClassCastException, qui est un RuntimeException.
  • vous avez tort
  • Où ai-je tort?
  • L'OP a dit que le compilateur se plaint suggérant à moi que vous n'obtenez pas une chance pour l'exécuter.
  • même s'il pouvait l'obtenir à compiler par la fixation de l'élément qui a eu une erreur de compilation, la ligne ci-dessus, il aurait provoqué une ClassCastException.
  • Vous avez tort parce que vous parlez de choses que vous ne devriez pas. L'eau est mouillée. Mais il est faux de parler de ce problème dans ce contexte. Ok? Évidemment, la question de savoir à ce sujet parce qu'il fait une expérience.
  • La raison pour laquelle je demande parce que je ne pouvais pas comprendre pourquoi le compilateur se comporte différemment dans ces deux cas. Maintenant, il fait sens. Merci!!
  • l'eau est humide ne fait pas de sens. L'eau est liquide. Il peut sembler évident pour beaucoup, mais on ne peut pas simplement supposer que cela est évident pour tout le monde. Plutôt, nous amener à l'évidence pour des précisions au lieu de le laisser glisser.

InformationsquelleAutor geo | 2013-04-24