Java 将程序转换为使用对象而不是数字
我被要求将程序转换为在数组中使用泛型类型 我不知道从哪里开始。我试图将数组转换为泛型,但总是遇到问题 我试图通过使用Java 将程序转换为使用对象而不是数字,java,priority-queue,Java,Priority Queue,我被要求将程序转换为在数组中使用泛型类型 我不知道从哪里开始。我试图将数组转换为泛型,但总是遇到问题 我试图通过使用queArray=(T[])(newcomparable[maxSize]),将数组转换为泛型数组但是在我修改所有变量以假设使用泛型类型之后,我不断地得到错误 我必须在这里更改什么?不清楚您想要什么,但我猜一下 对您的类型进行绑定(已编辑-was,但编号未实现可比性): 然后对于Long实现,只需: PriorityQ<Long> pqLong = new Priori
queArray=(T[])(newcomparable[maxSize]),将数组转换为泛型数组代码>但是在我修改所有变量以假设使用泛型类型之后,我不断地得到错误
我必须在这里更改什么?不清楚您想要什么,但我猜一下
对您的类型进行绑定(已编辑-was
,但编号
未实现可比性
):
然后对于Long
实现,只需:
PriorityQ<Long> pqLong = new PriorityQ<Long>(9);
PriorityQ pqLong=新的PriorityQ(9);
更新以下内容,以便在
thePQ.insert(30L);
thePQ.insert(50L);
thePQ.insert(10L);
thePQ.insert(40L);
thePQ.insert(20L);
您想声明T
必须实现Comparable
。这允许您明确声明PriorityQ
只能支持可以比较排序的类。这是这样做的:
class PriorityQ<T extends Comparable<T>>
最后,使用Comparable.compareTo
方法进行比较:
if( item .compareTo(queArray[j]) > 0 ) // if new item larger,
泛型的目的是避免像(Long)一样进行强制转换,这就是您要做的。这正是错误所说的-您正试图将整数
强制转换为长
。。。你不能那样做。你为什么要投它?在实例化(泛型)PriorityQ
@Brian Roach时,您也没有传递类型,我试图验证它,因为我需要比较值,而在不进行强制转换时,我会收到错误消息,比如说无法比较T,T。请检查下面Tim的答案-这是因为您使用的是泛型。您的类型T
需要通过接口限制为可比较的类型。所有的Number
子类(Long
,Integer
等)都实现了compariable
这个问题特别要求使用Object
而不是Number
我希望我能-1你。你误解了这个问题。它说不要使用数字(小写)而不是数字-他指的是原语。数字是一个物体,波希米亚人是对的。我需要将输入从一个整数改为一个对象。嗯,我认为这是在切字。既然两个代表让你很不高兴,我就取消否决票。没有具有自动装箱功能的原语。一切都是对象。从技术上讲,Number
是一个类,但使用它没有那么灵活。。。请看PriorityQueue
T扩展Number
实际上没有帮助,因为Number
父类没有定义比较方法。您不能保证Number
的子类提供了比较方法。所有的核心子类都会这样做(通过实现比较
)。。。但你不能保证这一点。Tim是正确的。好的,这实际上让我的代码这次编译:)我只需要补充一点,输入也必须通过使用thePQ.insert(Long.valueOf(30))转换为Long代码>。我想你的答案回答了我的问题。@NewHelpNeeder-你可以使用那种方法,或者直接传递30L
。自动装箱会将其转换为长
对象。
class PriorityQ<T extends Comparable<T>>
queArray = new T[maxSize];
if( item .compareTo(queArray[j]) > 0 ) // if new item larger,