当前位置: 首页 > 知识库问答 >
问题:

何时使用扩展或实现可比(Java)?为什么我不能创建对象

吕向阳
2023-03-14

我正在研究数据结构,我被要求编写一个程序,允许商店经理使用4个类来操作库存:ListInterface、ExpandableArrayList(实现该接口的类)、class item(存储在Arraylist中的类型),当然还有Test类。

有些方法需要使用compareTo。也就是说,具有可比性,但我不知道什么阶级应该具有可比性?我是否应该编写可比较的实现或扩展?

以下是我现在拥有的类标题:

public interface ListInterface<T extends Comparable <?super T >> {... }

public class ExpandableArrayList <T extends Comparable <? super T >>
implements ListInterface <T> { ...... } 

public class Item<T extends Comparable<T>> {... } 

但由于某些原因,我无法在测试类中创建对象。键入时:

ListInterface<Item> inventoryList= new ExpandableArrayList<Item>(); 

我发现以下错误:

Test.java:9: error: type argument Item is not within bounds of type-variable T 
ListInterface<Item> inventoryList= new ExpandableArrayList<Item> () ; 
where T is a type-variable:
T extends Comparable<? super T> declared in interface ListInterface


Test.java:9: error: type argument Item is not within bounds of type-variable T 
ListInterface<Item> inventoryList= new ExpandableArrayList<Item> () ;
where T is a type-variable:
T extends Comparable<? super T> declared in class ExpandableArrayList

我该如何解决这个问题?到底应该改变什么?...

提前非常感谢。

共有2个答案

谭嘉歆
2023-03-14

应该是这样的-

public interface ListInterface<T extends Comparable<? super T>> {... }

public class ExpandableArrayList<T extends Comparable<? super T>> implements ListInterface <T extends Comparable<? super T>> { ...... } 

public class Item implements Comparable<Item> {... } 
司徒翼
2023-03-14

T这是您的类型项目需要实现的可比性。这将允许ExpandableArrayList类使用该类提供的比较在Item类型的元素上运行compareTo方法。当您从Comparable实现compareTo时,您必须给出一种方法来比较不同的项目,这最好是基于Item类的属性。

public class Item implements Comparable<Item> {... }

这就是类def的外观。

您必须为接口编写实现,为类编写扩展。

继承教程

接口教程

 类似资料:
  • 问题内容: 我试图找出扩展Thread类的可能的优点是什么? 这是我描述的另一个问题的一部分:在Java中有两种创建线程的方法 从Thread类扩展 实现可运行的接口 如此处所述,使用可运行接口有许多好处。我的问题是从Thread类扩展的优点是什么?我想到的唯一好处是可以从Thread类扩展,并且可以称其为ThreadExtended类。然后,他/她可以在ThreadExtended中添加更多功能

  • 问题内容: 创建数组时,无法更改其大小;它是固定的。好的,看起来不错,我们可以创建一个新的更大的数组并逐个复制值,这有点慢。它的技术背景是什么? 问题答案: 这个问题没有提到语言,因此我将选择基于“ C”的数组作为答案。 数组被分配为单个内存块。增长数组是有问题的,因为正确执行此操作的唯一方法是在最后增长它。为了增加大小N,在数组的末尾必须在下一个分配的地址之前至少有N个空闲字节。 要支持这种类型

  • 问题内容: 请用一种易于理解的语言或一些文章的链接进行解释。 问题答案: 用于扩展课程。 用于实现接口 接口和常规类之间的区别在于,在接口中不能实现任何已声明的方法。只有“实现”接口的类才能实现方法。接口的C ++等效项将是一个抽象类(不完全相同,但差不多)。 同样,java不支持类的多重继承。这可以通过使用多个接口来解决。 现在延伸一堂课 在这种情况下 另外,请注意,@Override实现接口不

  • 我正在学习罗伯特·C·马丁(Robert C.Martin)2009年出版的《干净的代码》(Clean Code)一书,我偶然发现了衔接的概念(第10章)。罗伯特引用: 每个方法使用每个变量的类具有最大的内聚性。一般来说,创建这样的最大内聚类既不可取,也不可能。。。 不幸的是,我没有找到详细的解释。有没有人用真实的代码示例来解释这一点? 非常感谢!!

  • 问题内容: 事实并非如此,这让我感到惊讶。 我认为,如果这样声明,那将是很有意义的: 毕竟,是的集合,不是吗? 那么,为什么没有这样一个很好的实现呢? 感谢Cletus提供的最权威的答案,但是我仍然想知道为什么,如果你已经可以查看(通过),那么它不仅扩展了该接口。 如果a 是a ,则元素是什么?唯一合理的答案是“键值对” 确实会很棒! 但这提供了非常有限的(且不是特别有用的)Map抽象。 但是,如

  • 问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚