Une incarnation plus flagrante de votre problème est la suivante :
if ("foo" instanceof Number)
// "Incompatible conditional operand types String and Number"
Ceci est spécifié dans JLS 15.20.2 Opérateur de comparaison de types instanceof
:
RelationalExpression:
RelationalExpression instanceof ReferenceType
Si une distribution de l Expression relationnelle au Type de référence serait rejetée en tant qu'erreur de compilation, alors l'option instanceof
l'expression relationnelle produit également une erreur de compilation. Dans une telle situation, le résultat de l'expression instanceof
l'expression ne pourrait jamais être vraie.
En effet, cette expression cast génère une erreur de compilation :
(Number) "foo"
il en va de même pour cette expression :
("foo" instanceof Number)
Votre cas est un peu plus subtil, mais le principe est le même :
-
String
est une classe finale
-
String
ne met pas en œuvre Cloneable
- Par conséquent, vous ne pouvez pas faire
(Cloneable) aString
- Par conséquent, vous ne pouvez pas non plus
aString instanceof Cloneable