Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-的含义<;T<;T>>;?_Java_Generics_Polymorphism - Fatal编程技术网

Java-的含义<;T<;T>>;?

Java-的含义<;T<;T>>;?,java,generics,polymorphism,Java,Generics,Polymorphism,全文如下: public class RClass<T extends Comparable<T>> 公共类RClass 我说标题中的语句意味着插入方法的参数必须是实现Comparable的类的对象或其派生类的对象,这对吗 谢谢。是的,请记住,从compariable派生的类的对象是compariable对象。继承是一种is-a关系。这意味着类型参数必须支持通过可比较接口与自身类型的其他实例进行比较 Oracle教程中提供了此类类的示例。注意以下摘录中与T类似的模式:

全文如下:

public class RClass<T extends Comparable<T>>
公共类RClass
我说标题中的语句意味着插入方法的参数必须是实现Comparable的类的对象或其派生类的对象,这对吗


谢谢。

是的,请记住,从
compariable
派生的类的对象是
compariable
对象。继承是一种
is-a
关系。

这意味着类型参数必须支持通过可比较接口与自身类型的其他实例进行比较

Oracle教程中提供了此类类的示例。注意以下摘录中与
T类似的模式:

public class Name implements Comparable<Name> {
   ...
   public int compareTo(Name n) { ... }
}
公共类名实现了可比较的{
...
公共整数比较(名称n){…}
}

这意味着您只能创建
RClass
的一个实例,其类型实际上扩展了
Comparable
。因此,

RClass<Integer> a;

不是,因为
对象
根本不是可比较的扩展类。

在该类的某个地方,程序员需要编写类似

if(t.compareTo(othert) < 0) {
    ...
}
if(t.compareTo(othert)<0){
...
}

为此,类型T必须有一个compareTo方法,该方法将它与类型T的另一个对象进行比较。扩展Comparable可以保证这样一个方法的存在,除其他外。

Java-代码的含义是什么?

a)
可比性
是一个通用接口(记住它是一个“接口”,即不是一个“类”)

b)
扩展
表示从类或接口继承

从上面所说的点#a,它是一个接口..(记住它是从“接口”继承的,即不是从“类”继承的)

c) 综上所述,这两点#a和#b

这里“一个接口”扩展了“另一个接口”

应该为此类定义一个接口。。 这里只是一个例子

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 
这里,, 请特别注意RClass和 然后传递到
MinMax
。因为
MinMax
需要实现
compariable
的类型, 实现类(本例中为RClass)必须指定相同的绑定。此外,,
一旦建立了这个界限,就不需要在implements子句中再次指定它。

简单地说,泛型类型T必须是可比较的,以便与比较。否则你不能做比较。
在第28项中,它建议:
“始终使用Compariable==>guhanvj,
表示
具有
Compariable
对象的上限。因此,
可以有字节、字符、双精度、浮点、长、短、字符串和整数类的类型,它们都实现了自然排序的可比接口。

注意,
@TomHawtin-tackline您能举个例子说明为什么这是必要的吗?假设我的列表数据结构只适用于可比较的类型。我指定它的方式是公共类MyList。我想这会说明并强制执行我的数据结构只适用于可比较的类型,你的措辞会有什么不同?@TomHawtin-tackline你可能希望按照你所处理的类型进行自然排序,因为多态性小于funky@committedandroider
java.sql.Timestamp
(这是可比的)。这个例子有点“古怪”,但如果你在处理SQL,就像很多人必须处理的那样,那么你就拥有了SQL。为什么不让Name实现Compariable?为什么需要再次指定类名?@committedandroider因为Compariable是一个通用接口,你需要指定类型。这是一个很好的答案。但有趣的是,在有界泛型类型中,Java没有区别接口实现和类继承之间的差异-
是不合法的。如果
Comparable
是一个接口,为什么在这里允许扩展?它不应该是
implements
?您不能扩展接口。@piepi-因为它很有用,而且类型参数允许像
T extends U
这样的情况,无论U是类类型还是接口类型都可以使用。这与类声明不同,在类声明中,您的子类型是已知的(尽管可能已参数化)类型。在问题中,有人问
public**class**RClass
。它是一个类,而不是一个接口。因此,请评论一下如果它是一个类,它的含义是什么。回答很好。问题:为什么
class a
而不是
class a
?例如,
a
可以是
a
。这里
Integer
T
整数
实现了
Comparable`。
interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 
interface MinMax<T extends Comparable<T>> { 
   T min(); 
   T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> {
    .....
    .....
}