当前位置: 首页 > 知识库问答 >
问题:

矢量中的Java校正对象切片

罗新
2023-03-14

下面的代码可以工作,但是我得到一个编译器警告“参数化类'vecor'的原始使用”。那么Java允许对象切片,但仍然给出编译器警告?有没有更优雅的解决方案?

public class Derived extends Base {}

Vector<Derived> getVectorOfDerived();
Vector<Base> getVectorOfgetBase();

...
Vector<Base> v = DO_TEST ? (Vector<Base>) (Vector) getVectorOfDerived() : getVectorOfgetBase();

背景:在我看来,这是为数不多的对象切片有意义的情况之一:“派生”是来自生产数据“基础”的测试数据。“派生”与“基”具有相同的行为特征(变量、函数),但表现不同。将所有测试内容都放在“基”类中会使代码变得混乱。

共有1个答案

吴开宇
2023-03-14

尝试这样定义v:

Vector<? extends Base> v = DO_TEST ? getVectorOfDerived() : getVectorOfgetBase();

在这里,v将是base对象或从base继承的对象(例如,derived)的向量。

 类似资料:
  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。

  • 问题内容: 我将JComboBox与自定义类对象一起使用,并且equals方法被覆盖,并且非常深入地集成到代码中。 问题是,如果在JComboBox下拉列表中两个对象相等,那么如果选择了一个,则全部选中,并且get selected索引返回-1。 有没有一种方法可以将a强制转换为a ?我试过了 和 其中是的父项,是的扩展项,但它们都不编译。 我需要的只是JComboBox,不要使用重写的equal

  • 矢量或者说向量,可以通过2~4个分量表示一个向量,比如通过vec3(1,0,0)表示三维空间中一个沿着x轴正方向的三维方向向量,如果你有高中数学的基础,应该对向量有一定的了解,对于三维坐标的相关几何运算也有一定的概念。 关键字 数据类型 vec2 二维向量,具有xy两个分量,分量是浮点数 vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec4 四维向量 ,具有xyzw四个分量,分量是浮点

  • Vector是由连续整数索引的值的集合。 使用Clojure中的矢量方法创建矢量。 例子 (Example) 以下是在Clojure中创建矢量的示例。 (ns clojure.examples.example (:require [clojure.set :as set]) (:gen-class)) (defn example [] (println (vector 1 2 3

  • 我试着用升压::变体 但我收到错误:错误:从'std::向量'转换为非标量类型'std::向量 编辑: 我在。h文件 现在我有以下错误: /softs/boost/1 . 53 . 0/64/gcc/4 . 5 . 1/include/boost/detail/reference _ content . HPP:在成员函数' void boost::detail::variant::assign

  • 问题内容: 我们使用iText从Java生成PDF(部分基于此站点的建议)。但是,将徽标的副本以GIF之类的图像格式嵌入会导致人们放大和缩小时看起来有些奇怪。 理想情况下,我们希望以矢量格式嵌入图像,例如EPS,SVG或只是PDF模板。该网站声称EPS支持已被删除,在PDF中嵌入PDF或PS可能会导致错误,甚至没有提到SVG。 我们的代码直接使用Graphics2D API而不是iText,但是我