作为作业的一部分,我编写了以下代码,将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初学者。
答案 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
。他们以同样的方式这样做。