Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过ArrayList从特定类访问变量_Java_Arraylist - Fatal编程技术网

Java 通过ArrayList从特定类访问变量

Java 通过ArrayList从特定类访问变量,java,arraylist,Java,Arraylist,我有一个名为Questions的类,它有两个子类multipleechoice和FillInBlank。这两个子类都有唯一的实例变量 现在让我们假设我有一个arraylistquestions,它存储两种类型的问题(multipleechoice和FillInBlank) 我的问题是:当我遍历questions ArrayList时,如何从multipleechoice类和FillInBlank类访问特定的实例变量?我遇到了问题,因为arraylist的类型是type questions。如注释

我有一个名为
Questions
的类,它有两个子类
multipleechoice
FillInBlank
。这两个子类都有唯一的实例变量

现在让我们假设我有一个
arraylistquestions
,它存储两种类型的问题(
multipleechoice
FillInBlank


我的问题是:当我遍历questions ArrayList时,如何从
multipleechoice
类和
FillInBlank
类访问特定的实例变量?我遇到了问题,因为arraylist的类型是type questions。

如注释中所述,应使用
instanceof
来标识哪个子类是当前元素,然后应将此元素转换为此子类:

for(问题:问题){
if(多回音问题实例){
剂量测量((多重回声)问题);
}else if(填充块的问题实例){
doSomething((填空)问题);
}否则{
System.out.println(“意外类:+question.getClass());
}
}
// ...
私人无效剂量测定法(MultipleChice mc){
//做点什么
System.out.println(mc.getChoice());
}
私人空白剂量测定(填充空白fib){
//做点什么
System.out.println(fib.getFilledAnswer());
}

如注释中所述,应使用
instanceof
来确定哪个子类是当前元素,然后该元素应转换为该子类:

for(问题:问题){
if(多回音问题实例){
剂量测量((多重回声)问题);
}else if(填充块的问题实例){
doSomething((填空)问题);
}否则{
System.out.println(“意外类:+question.getClass());
}
}
// ...
私人无效剂量测定法(MultipleChice mc){
//做点什么
System.out.println(mc.getChoice());
}
私人空白剂量测定(填充空白fib){
//做点什么
System.out.println(fib.getFilledAnswer());
}
自动转换为
实例
答案是正确的

简化了该代码,并实现了。这个过程将自动进行

由于在调用
instanceof
后立即进行强制转换非常常见:

if(字符串的obj实例){
字符串s=(字符串)obj;//grr。。。
...
}
…模式匹配技术现在允许隐式铸造。注意在
if(instanceof)
测试中引入了一个变量名

if(字符串s的obj实例){//问题=
名单(
新的多重回声(),
新的FillInBlank(),
新的FillInBlank()
);
//System.out.println(“问题=”+问题);
(问题:问题)
{
if(多回音q的问题实例)
{
剂量测定法(q);
}else if(填充空格q的问题实例)
{
剂量测定法(q);
}否则
{
System.out.println(“意外类:+question.getClass());
}
}
}
私人无效剂量测定法(MultipleChice mc)
{
//…做点什么…
System.out.println(mc.getChoice());
}
私人空白剂量测定(填充空白fib)
{
//…做点什么…
System.out.println(fib.getFilledAnswer());
}
}
抽象类问题
{
公共最终UUID id=UUID.randomUUID();
@凌驾
公共字符串toString(){return“Question[id=“+id+”]”;}
}
最后一节课是一个问题
{
公共字符串getChoice(){return“some choice response.ID:+this.ID;}
}
最后一节课填空扩展问题
{
公共字符串getFilledAnswer(){return“some filled response.ID:+this.ID;}
}
跑步的时候

一些选择响应。识别号:bf418995-2d33-47c8-8276-06442330337a
一些人回答了这个问题。ID:3fef17a3-9f46-463f-8e80-5361df6089bc
一些人回答了这个问题。ID:1f2cb1e0-6142-49f2-96b8-888ded1210db
密封类 将来,可能有助于进一步简化此类代码。

自动转换
实例
答案是正确的

简化了该代码,并实现了。这个过程将自动进行

由于在调用
instanceof
后立即进行强制转换非常常见:

if(字符串的obj实例){
字符串s=(字符串)obj;//grr。。。
...
}
…模式匹配技术现在允许隐式铸造。注意在
if(instanceof)
测试中引入了一个变量名

if(字符串s的obj实例){//问题=
名单(
新的多重回声(),
新的FillInBlank(),
新的FillInBlank()
);
//System.out.println(“问题=”+问题);
(问题:问题)
{
if(多回音q的问题实例)
{
剂量测定法(q);
}else if(填充空格q的问题实例)
{
剂量测定法(q);
}否则
{
System.out.println(“意外类:+question.getClass());
}
}
}
私人无效剂量测定法(MultipleChice mc)
{
//…做点什么…
System.out.println(mc.getChoice());
}
私人空白剂量测定(填充空白fib)
{
//…做点什么…
System.out.println(fib.getFilledAnswer());
}
}
抽象类问题
{
公共最终UUID id=UUID.randomUUID();
@凌驾
公共字符串toSt