无法使用Java中的List类进行向下转换

Str*_*ist 8 java generics collections downcast

我一直在寻找答案,但无济于事.我的问题是为什么不可能用泛型来贬低.我有一个名为Job的类,并扩展了一个名为Model的类

Job extends Model
Run Code Online (Sandbox Code Playgroud)

现在,我从一个可重用的代码中获取了一组Jobs,这些代码生成了一个Models列表

// error: Cannot cast from List<Model> to List<Job>
List<Job> jobs = (List<Job>) jobMapper.fetchAll();
Run Code Online (Sandbox Code Playgroud)

其中jobMapper.fetchAll()返回一个List,其中的每个模型都是一个Job对象.

我认为这样可行,因为我能做到:

EditText mUsername = (EditText) findViewById(R.id.editUserName);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的向下转换.

Leo*_*dos 12

你不能这样做,因为Java不允许这样做.读这个.你应该这样做:

 List<Job> jobs = (List<Job>) ((List<?>)jobMapper.fetchAll());
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下:这是一个非常糟糕的主意*.它只隐藏警告并有效地从此列表中删除所有泛型类型信息(以及从泛型获得的所有保证). (2认同)