java中多对象类型ArrayList的访问方法
我有一个超类,多个不同的子类从中扩展。然后,每个子类都有其他子类可能无法遵循的具体类的特定方法。例如:
- 公共课NMEA。。。所有子类都持有的方法
- 公共类GPGGASENTE扩展了NMEA。。对这种类型有一些特定的方法
- 公共类GPGPS内容扩展了NMEA。。对这种类型有一些特定的方法
我通过检查字符串中的前几个字母,然后在各种可能性之间切换来创建一个子类
ArrayList<NMEA> sentences = new ArrayList<>();
switch (s.split(",")[0]){
case "$GPGGA":
sentences.add(new GPGGASentence(s));
break;
case "$GPGPS":
sentences.add(new GPGPSSentence(s));
break;
}
现在我要开始循环这个ArrayList。目前我正在做以下工作:
for(NMEA nmea : sentences){
if(nmea instanceof GPGGASentence){
system.out.println((GPGGASentence) nmea).someSpecificMethod());
}
}
我想知道他们是不是有更好的方法
# 1 楼答案
除了编写
abstract class
/interface
并声明所有方法之外,您还可以这样做来提高代码的可编辑性:enum
switch
李>下面是一个例子。如下所示声明枚举:
现在,返回
type
的方法是:现在,将其与
switch
循环内的for
一起使用:如果将来添加了一个新的
Impl
类(或者更改了任何类的名称),则只需添加一个enum
值和一个switch case
# 2 楼答案
我解决这个问题的方法是按照建议将NMEA类更改为抽象类,列出该类中的所有方法,然后重写它们