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,