语法<T在Java中扩展了Class >
关于以下内容,我有几点想法:
public interface MaxStack<T extends Comparable >
1 – 为什么实现MaxStack
的类应该像这样编写:
public class MaxStackclass<T extends Comparable > implements MaxStack
而不是public class MaxStackclass<T extends Comparable > implements MaxStack<T extends Comparable >
?
2-为什么这个类的私有变量,当我使用generics时,应该只用编写而不用
<T extnds Comparable>
? 例如, private List stack= new ArrayList();
3 – <T extends Comparable>
和之间有什么区别 – 如果我需要比较我class级中的bewteen元素,两者都可以,不是吗?
编辑:我认为3的问题是,它可能允许插入以第二种方式定义的列表,以便具有不同的元素,这些元素都可以从可比较的方面扩展,然后当我想比较它们时,它将不可能,因为我们无法将String与Integer进行比较,所以都从Comparable扩展。
-
在声明
maxStackclass
您已经在> T
上表达了边界。 所以你不需要它了。 -
原因与上述相同。 无需再次在同一类型参数上指定边界。
-
表示> T
必须实现可比较两个T
实例的Comparable
接口。 虽然
意味着T
实现了Comparable
,因此它可以比较两个Object
。 前者更具体。
如果我需要比较class上的各种元素,两者都可以,不是吗?
那么,从技术上讲,你可以使用两者来达到相同的效果。 但是对于声明
,它将涉及不必要的强制转换,你可以避免使用类型safe
1)类有一个带有bound的类型参数T
( extends Comparable
),这个参数传递给接口(这里需要相同的绑定)。 传递类型参数时,您不能重复它的约束 – 为什么要这样做?
2)如1),类型参数声明其绑定,不重复必要。
澄清:
第一个类型参数出现(在接口或类名后面)是它的声明。 任何后续发生都是一种用法。 你每次使用它时都不会写一个变量类型声明,对吧?
“3 –
和
之间有什么区别 – 如果我需要比较我class级中的bewteen元素,两者都可以,不是吗?”
不,两者都不会好的。 假设我有一个类Foo
,它implements Comparable
但类Foo和Bar彼此没有关系。 然后Foo
无法与Foo
类型的其他对象进行比较。
会将此问题视为一个问题。
不会。
>
更多细节在这里