我脑部抽筋:我有一个public interface SomeInterface
和一个,static private class SomeClass
并且试图List<SomeInterface>
从我的方法之一返回a ,但是出现错误(在return list;
下面的行中):
Type mismatch: cannot convert from List<GenericList1.SomeClass> to
List<GenericList1.SomeInterface>
如何解决此问题而无需创建新列表?
澄清:
我不希望将列表创建为List<SomeInterface>
(也许是显而易见的解决方案),因为我想私下维护一个List<SomeClass>
,以便将来可以访问SomeClass的方法,而不是公共接口中的方法。在下面的示例案例中没有显示,但是在我的真实程序中我需要它。
import java.util.ArrayList;
import java.util.List;
public class GenericList1 {
public interface SomeInterface
{
public int getX();
}
private static class SomeClass implements SomeInterface
{
final private int x;
@Override public int getX() {
return this.x;
}
public SomeClass(int x) { this.x = x; }
}
public static void main(String[] args) {
List<SomeInterface> list = createList(10);
printList(list);
}
private static void printList(List<SomeInterface> list) {
for (SomeInterface si : list)
System.out.println(si.getX());
}
private static List<SomeInterface> createList(int n) {
List<SomeClass> list = new ArrayList<SomeClass>();
for (int i = 0; i < n; ++i)
list.add(new SomeClass(i));
return list;
}
}
您应该将方法重新定义为
private static List<? extends SomeInterface> createList(int n) { ...
同样,其他列表声明。 只要您从 通用列表中 读取值,就可以 多态处理通用列表。
(如果要向列表中添加新元素,则应使用List<? super SomeInterface>
。)
这个成语被缩写为 PECS - Producer:Extends / Consumer:Super ,由Josh Bloch在有效Java
2nd Edition,项目28中创造。
正如其他人指出的那样,因为a 并不是* a ,所以即使List<SomeClass>
是,也需要这种习语。所引用文件中对此原因进行了详细说明。
*List<SomeInterface>``SomeClass implements SomeInterface
问题内容: ** 我定义了以下类和接口: 我有一个的对象,我需要投给的对象: 上面的最后一行导致编译错误“无法从List 强制转换为List ”。我尝试通过以下方法解决此问题: 不幸的是,这引发了。有谁知道我该如何解决? ** 问题答案: ** 您不能像那样抛弃它。创建一个新的: 构造函数采用。无论如何,它将指向相同的引用。 **
问题内容: 原始列表将转换为正常。为什么原始列表的列表不能转换为的列表? 背景故事 (以减轻xy问题): 我正在使用return的API 。我碰巧知道它一直都是。我计划循环并构建自己的循环,但是我在尝试编写时试图修复(但不禁止)原始类型编译器警告。 我试过了: 但是这些会导致类型不匹配错误。 有趣的是,这没有给出警告或错误: 问题答案: // #1 (does compile) List raw
问题内容: 现在,我想创建一个新列表,其中包含中的所有值。这里的结果应该包含 问题答案: 使用以下方法尝试:
我有一个json 我怎么把它转换成学生名单(A,理科)(B,理科)
问题内容: 如果我有一个,如何通过使用Java 8的功能将其转换为以相同的迭代顺序包含所有对象的? 问题答案: 你可以用于将内部列表(将它们转换为Streams之后)展平为单个Stream,然后将结果收集到列表中:
本文向大家介绍python实现将一维列表转换为多维列表(numpy+reshape),包括了python实现将一维列表转换为多维列表(numpy+reshape)的使用技巧和注意事项,需要的朋友参考一下 如题,我们直接使用numpy 运行结果为: 这样,我们就将一维列表转换为二维列表啦,俗称列表中的列表。 以上这篇python实现将一维列表转换为多维列表(numpy+reshape)就是小编分享给