当前位置: 首页 > 面试题库 >

java从List强制转换 **为 B扩展A的列表**

鞠嘉志
2023-03-14
问题内容

**

这可能吗?如果不是,为什么在Java中这不可能呢?

interface B extends A {}
public List<B> getList();
List<A> = getList(); // Type mismatch: cannot convert from List<B> to List<A>

**

我认为我正在寻找的主题是此处“协变类型”,但是它晦涩难懂,并且不能解决我的问题。


问题答案:

这是一个直观的示例,说明如何使错误变得可怕:

interface B extends A {}
List<B> blist=new List<B>();
List<A> alist=blist;
alist.add(new A()); //should be ok, right?
B b = blist.get(0); //fail: even though blist is a List<B>, it now has an A in it


 类似资料:
  • 问题内容: 我实现了以下代码: 当单独编译时,这两行都可以正常编译,但是使用给出运行时错误 。 为什么它们编译良好,但会给出运行时错误? 问题答案: type变量可以像在case类中那样存储对类型或其子类型的对象的引用。 因此,可能会有类似以下的代码: 变量是类型的,因此它只能访问该类的API,而不能访问在类B中添加的方法,即它所指向的对象。但是有时我们希望能够访问那些方法,因此应该可以以某种方式

  • 问题内容: ** 我定义了以下类和接口: 我有一个的对象,我需要投给的对象: 上面的最后一行导致编译错误“无法从List 强制转换为List ”。我尝试通过以下方法解决此问题: 不幸的是,这引发了。有谁知道我该如何解决? ** 问题答案: ** 您不能像那样抛弃它。创建一个新的: 构造函数采用。无论如何,它将指向相同的引用。 **

  • 问题内容: 在Java中,我可以以某种方式强制某个扩展了抽象类的类以将Object作为参数实现其构造函数吗? 就像是 问题答案: 您可以在抽象类中使用带有参数的构造函数(如果要禁止匿名子类,请将其保护)。 这样做会强制实现类具有显式构造函数,因为它必须使用一个参数来调用超级构造函数。 但是,您不能强制覆盖的类具有带有参数的构造函数。它总是可以伪造这样的参数:

  • 我在本地模式下运行storm拓扑时遇到了这个错误。我有一个简单的程序,它检查一个数字是否是质数。我使用作为处理它的源和Storm。Kafka2.10-0.8.2.1Storm0.9.4动物园管理员3.4.6

  • 问题内容: 我正在学习Java,但有两个问题: 之间有什么区别? 和 考虑到: 之间有什么区别: (A)x.run_function(); 假设A和B都具有函数,将执行哪个函数? 问题答案: 最重要的区别在于对象的静态和动态类型与对象的引用之间。 说B延伸A,C延伸B。 对象的动态类型(新类型中使用的类型)是其实际的运行时类型:它定义了对象的实际方法。 对象引用(变量)的静态类型是编译时类型:它定

  • 我有这样一种方法,将结果强制转换到(列表),但我的eclipse仍然在抱怨!类型安全:未选中从列表到列表的强制转换