我有一类(子)对象
public class SubObjects {
int depth;
public SubObjects(int d) {
this.depth = d;
}
}
和一类对象
public class Objects {
private int height;
private int width;
ArrayList<SubObjects> liste;
public Objects(int h, int w) {
this.height = h;
this.width = w;
this.liste = new ArrayList<>();
}
}
这些对象包含高度和宽度值以及子对象的阵列列表。这可以按预期工作,但是我确实希望在这些ArrayList中存储来自不同类的多种类型的子对象。
经过一点谷歌搜索,我将对象类更改为
public class Objects {
private int height;
private int width;
ArrayList<Object> liste;
public Objects(int h, int w) {
this.height = h;
this.width = w;
this.liste = new ArrayList<Object>();
}
}
这使我能够像预期的那样,在ArrayList中存储来自第二类子对象2的对象
public class SubObjects2 {
int weight;
public SubObjects2(int weight) {
this.weight = weight;
}
}
这很好,我认为我已经解决了这个问题,但随后我运行了main类,而使用早期的实现,我可以使用getter从ArrayList中的对象返回值
... liste.get(i).depth (in a for loop)
同一查询现在返回以下错误
Unresolved compilation problem:
depth cannot be resolved or is not a field
现在如何访问存储在ArrayList中的子对象内的值?
如果两个类之间没有关系,除了它们都扩展了所有对象都扩展的对象类,并且您希望将这两个类的对象存储在同一个列表中,那么您可以将它们存储在对象列表中。
在访问对象的属性之前,需要将其强制转换为要使用的类型。这是在泛型之前的做法。
List list = new ArrayList(List.of(Integer.valueOf(1), "hello"));
for(Object o: list){
if (o instanceof Integer){
System.out.println("o is an integer.");
Integer i = (Integer) o;
System.out.println(i.intValue());
} else if (o instanceof String){
System.out.println("o is a string.");
String s = (String) o;
System.out.println(s.length());
}
}
您的问题是对象
类没有名为深度
的字段,只有子对象
具有此属性
如果你所有的类型都有你想要的公共属性,你可以创建一个接口,所有的类型都应该实现它,例如
interface SubObject {
int value();
}
public class SubObjects implements SubObject {
...
@Override
public int value() {
return depth;
}
}
public class SubObjects2 implements SubObject {
...
@Override
public int value() {
return weight;
}
}
现在,您将创建一个SubObject列表,在循环中,它将
for (int i = 0; i < lists.size() ; i++) {
int value = lists.get(i).value();
}
另一种解决方案是检查类型并在获取值之前强制转换它
List<Object> lists = new ArrayList<>();
for (int i = 0 ; i < lists.size(); i++) {
Object object = lists.get(i);
if (object.getClass() == SubObjects.class) {
SubObjects subObject = (SubObjects) object;
int depth = subObject.depth;
}
else if if (object.getClass() == SubObjects2.class) {
SubObjects2 subObject2 = (SubObjects2) object;
int weight = subObject2.weight;
}
}
每个类都有一些独特的字段。所有最大的功能是:添加,更新,删除,查找,显示列表,保存,加载文件 -所以,首先我将创建一个名为Product的类,它有4个公共字段。以上课程将从产品延伸。 -然后,我想我可能会创建一个ComputerStore类,它有一个字段是items类型ArrayList。items存储所有的对象,这些对象是上述4个类的实例,但我不确定。
我目前正在用Spring Boot和Thymeleaf做一个项目,以了解两者的基本知识。现在我被一个问题卡住了,这个问题看起来很容易,但我无法掌握它的窍门。我只是有一个名为“电影”的现有对象,我想编辑它并将覆盖的版本保存到数据库中。现在我所要做的就是用电影的数据填充一个表单。这很好,但问题是,因为一部电影可以有多个演员,所以我在每个电影对象中保存了一个演员的数组列表,其中有一个名为name的属性。
问题内容: 我不知道这是否可能,但是可以。使用回调使工作变得更加困难。 我有一个包含html文件的目录,我想使用node.js和socket.io将它们以对象块的形式发送回客户端。 我所有的文件都在/ tmpl中 因此,套接字需要读取/ tmpl中的所有文件。 对于每个文件,必须将数据存储在对象中,文件名作为键,内容作为值。 最后的回调也是错误的。目录中的所有文件完成后,必须调用它。 但是我不知道
问题内容: 我需要从给定列表中选择一些元素,知道它们的索引。假设我要创建一个新列表,该列表包含给定列表[-2、1、5、3、8、5、6]中索引为1、2、5的元素。我所做的是: 有什么更好的方法吗?像c = a [b]? 问题答案: 您可以使用: 或者您可以使用numpy: 但实际上,您当前的解决方案很好。这可能是所有人中最整洁的。
我有一个x,y,z坐标的三个向量 我想压缩他们有一个5x3的坐标数组。但当我做的时候 然后试着打印coords,我得到 我也不能策划他们, 如何获得5x3阵列?
问题内容: 通过多个属性对数组中的元素进行分组最符合我的问题,因为它确实通过数组中的多个键对对象进行了分组。问题是此解决方案无法汇总属性值,然后删除重复项,而是将所有重复项嵌套在二维数组中。 预期行为 我有一个对象数组,必须按和进行分组。 这个数组中的对象被视为重复仅当其和是相同的。如果它们是,我想分别总结它们的和值,然后删除重复项。 因此,在这个例子的结果阵列可以仅含有四种组合:,,, 问题 我
按多个属性对数组中的元素进行分组最符合我的问题,因为它确实是按数组中的多个键对对象进行分组的。问题是,这种解决方案不求和属性值,然后删除重复项,而是将所有重复项嵌套在二维数组中。 预期行为 我有一个对象数组,必须按和分组。 此数组中的对象只有在它们的和相同时才被认为是重复的。如果是,我想分别总结它们的和值,然后删除重复项。 因此,在这个示例中,结果数组可能只包含四种组合:,,, 问题 我在这里尝试
我必须创建以下程序: 创建一个允许您键入名称的程序。用户键入并提交(使用enter键)的名称应存储在arraylist中。然后,arraylist中的名称应打印在屏幕上。 我的问题是,我只能在我的数组列表中存储一个名字。 我的代码: 第一个问题是,在键入一个名称并提交后,您不能键入任何内容,因此我必须重置输入,如使用整数值: