如何在此代码中避免运行时类型检查?

时间:2014-11-18 12:26:14

标签: java

作为作业的一部分,我编写了以下代码,将2d阵列编码为双链表。

RunLengthEncoding类负责编码/解码功能。在这个类的实现中,有必要对一些变量进行类型转换以在运行时推送类型检查(String)。

以下是进行类型转换的行:

class RunLengthEncoding {
  private DList2 list;


  private String nextRun() {
      Object obj = null;
        .....
      obj = this.list.nTh(this.sizeOfRun);
      return (String)obj;
  }

  public void check() {
          ....
      while(node != this.list.sentinel){
         int nodetype = Utility.regexChecker("\\D{1,}", (String)node.runObject, 1);
      }
  }

}

====================

完成类型转换因为,因为双向链表(class DList2{..})是DListNode2的列表,它接受并返回Object类型的对象。

class DListNode2{
   Object runObject;
   DListNode2 prev;
   DListNode2 next;
}

我的问题:

当我使用RunLengthEncoding类时,我应该如何避免在DList2类中进行类型转换以避免运行时类型检查?

注意:我是一名java初学者。

1 个答案:

答案 0 :(得分:1)

你应该使用泛型。例如:

class DList<T> {
    DListNode2<T> head; // Or whatever properties your class contains
}

class DListNode2<T> {
   T runObject;
   DListNode2<T> prev;
   DListNode2<T> next;
}

在您的RunLengthEncoding班级中声明list,如下所示:DList<String> list;。这样,您可以在列表中定义参数的类型,并且在从列表中检索对象时不必进行转换。

查看标准Java Collections API类,例如LinkedList。他们以同样的方式这样做。