Java 向上转换模板参数类型
为什么Java不支持自动向上转换模板参数类型 例如,除非将新创建的Java 向上转换模板参数类型,java,upcasting,Java,Upcasting,为什么Java不支持自动向上转换模板参数类型 例如,除非将新创建的派生的实例手动强制转换为基实例,否则将不会编译以下类: public class Example implements Iterable<Base> { @Override public Iterator<Base> iterator() { return Arrays.asList(new Derived()).iterator(); } private
派生的
实例手动强制转换为基
实例,否则将不会编译以下类:
public class Example implements Iterable<Base> {
@Override
public Iterator<Base> iterator() {
return Arrays.asList(new Derived()).iterator();
}
private class Base {
}
private class Derived extends Base {
}
}
公共类示例实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回Arrays.asList(新派生的()).iterator();
}
私人阶级基础{
}
私有类派生扩展基{
}
}
无需强制转换。
这里的问题是,Arrays.asList(new-Derived())
自然地尝试创建一个列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器,
它是迭代器的
,因此会出现编译错误
您可以使用数组.asList
指定需要一个列表。
这很有效,
因为您当然可以将派生的
实例放入列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器
类示例实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回Arrays.asList(新派生的()).iterator();
}
}
无需强制转换。
这里的问题是,Arrays.asList(new-Derived())
自然地尝试创建一个列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器,
它是迭代器的
,因此会出现编译错误
您可以使用数组.asList
指定需要一个列表。
这很有效,
因为您当然可以将派生的
实例放入列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器
类示例实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回Arrays.asList(新派生的()).iterator();
}
}
无需强制转换。
这里的问题是,Arrays.asList(new-Derived())
自然地尝试创建一个列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器,
它是迭代器的
,因此会出现编译错误
您可以使用数组.asList
指定需要一个列表。
这很有效,
因为您当然可以将派生的
实例放入列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器
类示例实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回Arrays.asList(新派生的()).iterator();
}
}
无需强制转换。
这里的问题是,Arrays.asList(new-Derived())
自然地尝试创建一个列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器,
它是迭代器的
,因此会出现编译错误
您可以使用数组.asList
指定需要一个列表。
这很有效,
因为您当然可以将派生的
实例放入列表
,
然后在列表上调用.iterator()
,自然会得到一个迭代器
类示例实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回Arrays.asList(新派生的()).iterator();
}
}
ReturnIteratorReturnIteratorReturnIteratorReturnIterator
class Example implements Iterable<Base> {
@Override
public Iterator<Base> iterator() {
return Arrays.<Base>asList(new Derived()).iterator();
}
}