Приведение в последней строке предполагает, что list.get (0) не возвращает строку.
Это неточно. Если возвращенный объект не был a String
, тогда приведение не было бы возможным. Другими словами, вы можете привести что-то к String
, только если это что-то String
. Попробуйте привести что-то еще, вы увидите:
Object i = Integer.valueOf(5);
String j = (String)i; //Exception!
Приведение необходимо в вашем коде, потому что list.get(0)
возвращает тип Object
, но мы хотим присвоить его String s
. Мы, как программисты, знаем, что Object
, возвращаемый из списка, на самом деле String
, а компилятор - нет. Компилятор просто видит это:
Object l = list.get(0);
String s = l;
Вторая строка не может быть скомпилирована без явного приведения к String
.
И просто для пояснения ... вы никогда не увидите такой код вреальный мир, если вы не работаете над чем-то серьезно старым. Java имеет дженерики начиная с Java 5 (2004), и вот уже 15 лет. На данный момент вы действительно не должны видеть List
без этого List<SomeType>
(например, List<String>
)