有如下代码: 1.LinearList.java //线性表的相关操作
public abstract class LinearList {
abstract public int length();
abstract public boolean isEmpty();
abstract public boolean isFull();
abstract public Object get(int i);
abstract public Object get();
abstract public boolean insert(int i,Object obj);
abstract public boolean insert(Object obj);
abstract public int indexOf(Object obj);
abstract public Object search(Object obj);
abstract public boolean remove(int i);
abstract public boolean remove();
abstract public void sort(LinearList sorter);
abstract public Object set(int i,Object obj);
abstract public void seek(int curr);
abstract public void sort(int from,int to,int order);
} 2.ListSorter.java//接口 interface ListSorter {
public void sort(LinearList list);}interface Compare{
int compareTo(Object obj);
}
3.InsertionSort.java//插入排序public class InsertionSort implements ListSorter {
public void sort(LinearList list) {
// TODO Auto-generated method stub
int i=2,j;
int size=list.length();
Object tem=list.get(i);
for(i=2;i<=size;i++){
tem=list.get(i);
for(j=i-1;j>0;j--){
if(((Compare)tem).compareTo(list.get(j))<0) list.set(j+1,list.get(j));
else {
break;
}
}
list.set(j+1,tem);
} }}4.ArrayList.java//LinearList的具体实现,部分代码public class ArrayList extends LinearList{
private Object table[];
int size;
int current;
public ArrayList(int n){
table=new Object[n];
size=0;
current=-1;
}
public int length(){
return size;
}
}
我的问题:红色标示的代码该如果理解?(Compare)tem是强制将tem转换为Compare接口,能够将Object强制转换为接口吗?我自己写了一个测试的程序如下,运行就报错,不能转换,请问何解??ArrayList.java//自己写的一个测试程序
package com.zoe.ds;
public class ArrayList {//implements ListSorter
private Object test;
private Object test2;
public ArrayList(Object obj,Object obj2){
this.test=obj;
this.test2=obj2;
}
public Object get(Object obj){
return obj;
}
public void sort(){
System.out.println("Test");
if(((CompareDB)test).compareTo(test2)<0){
System.out.println("ok");
}
}
}CompareDB.java//类似的接口
package com.zoe.ds;
interface ListSorter {
public void sort();} interface CompareDB {
int compareTo(Object obj);
}
testCompare.java//执行程序
package com.zoe.ds;
public class testCompare { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub ArrayList arl=new ArrayList(new Integer(15),new Integer(24));
arl.sort();
}}
运行报错:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.zoe.ds.CompareDB
at com.zoe.ds.ArrayList.sort(ArrayList.java:16)
at com.zoe.ds.testCompare.main(testCompare.java:14)
public abstract class LinearList {
abstract public int length();
abstract public boolean isEmpty();
abstract public boolean isFull();
abstract public Object get(int i);
abstract public Object get();
abstract public boolean insert(int i,Object obj);
abstract public boolean insert(Object obj);
abstract public int indexOf(Object obj);
abstract public Object search(Object obj);
abstract public boolean remove(int i);
abstract public boolean remove();
abstract public void sort(LinearList sorter);
abstract public Object set(int i,Object obj);
abstract public void seek(int curr);
abstract public void sort(int from,int to,int order);
} 2.ListSorter.java//接口 interface ListSorter {
public void sort(LinearList list);}interface Compare{
int compareTo(Object obj);
}
3.InsertionSort.java//插入排序public class InsertionSort implements ListSorter {
public void sort(LinearList list) {
// TODO Auto-generated method stub
int i=2,j;
int size=list.length();
Object tem=list.get(i);
for(i=2;i<=size;i++){
tem=list.get(i);
for(j=i-1;j>0;j--){
if(((Compare)tem).compareTo(list.get(j))<0) list.set(j+1,list.get(j));
else {
break;
}
}
list.set(j+1,tem);
} }}4.ArrayList.java//LinearList的具体实现,部分代码public class ArrayList extends LinearList{
private Object table[];
int size;
int current;
public ArrayList(int n){
table=new Object[n];
size=0;
current=-1;
}
public int length(){
return size;
}
}
我的问题:红色标示的代码该如果理解?(Compare)tem是强制将tem转换为Compare接口,能够将Object强制转换为接口吗?我自己写了一个测试的程序如下,运行就报错,不能转换,请问何解??ArrayList.java//自己写的一个测试程序
package com.zoe.ds;
public class ArrayList {//implements ListSorter
private Object test;
private Object test2;
public ArrayList(Object obj,Object obj2){
this.test=obj;
this.test2=obj2;
}
public Object get(Object obj){
return obj;
}
public void sort(){
System.out.println("Test");
if(((CompareDB)test).compareTo(test2)<0){
System.out.println("ok");
}
}
}CompareDB.java//类似的接口
package com.zoe.ds;
interface ListSorter {
public void sort();} interface CompareDB {
int compareTo(Object obj);
}
testCompare.java//执行程序
package com.zoe.ds;
public class testCompare { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub ArrayList arl=new ArrayList(new Integer(15),new Integer(24));
arl.sort();
}}
运行报错:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.zoe.ds.CompareDB
at com.zoe.ds.ArrayList.sort(ArrayList.java:16)
at com.zoe.ds.testCompare.main(testCompare.java:14)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货