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