Java 爪哇:我不知道';我根本不理解泛型的定义
我有一些排序方法,为了工作,它们需要接受一个定义了Java 爪哇:我不知道';我根本不理解泛型的定义,java,generics,inheritance,comparable,Java,Generics,Inheritance,Comparable,我有一些排序方法,为了工作,它们需要接受一个定义了compareTo的对象 以下为通用定义的一部分: private static <SomeType extends Comparable<? super SomeType>> void doSomeSort(SomeType[] a, int left, int right){ private static最终,您真正需要知道的是,它意味着: SomeType x = ...; SomeType y = .
compareTo
的对象
以下为通用定义的一部分:
private static <SomeType extends Comparable<? super SomeType>>
void doSomeSort(SomeType[] a, int left, int right){
private static最终,您真正需要知道的是,它意味着:
SomeType x = ...;
SomeType y = ...;
int comparison = x.compareTo(y);
将编译
更准确地说,这意味着SomeType
为SomeType
的继承层次结构中的某个类型T
实现了compariable
。。。您不必指定T
是什么,但结果是上面的代码可以工作:)最终,您真正需要知道的是它意味着:
SomeType x = ...;
SomeType y = ...;
int comparison = x.compareTo(y);
将编译
更准确地说,这意味着SomeType
为SomeType
的继承层次结构中的某个类型T
实现了compariable
。。。不必指定T
是什么,但结果是上面的代码可以工作:)它转换为:
- 类型
SomeType
必须扩展或实现类可比性
- 类
Comparable
本身,在本例中,将某种类型作为参数,我们称之为T
- 类型
T
必须是SomeType
或SomeType
的超类
适合此模式的经典类型是Integer
,因为它实现了compariable
,它转换为:
- 类型
SomeType
必须扩展或实现类可比性
- 类
Comparable
本身,在本例中,将某种类型作为参数,我们称之为T
- 类型
T
必须是SomeType
或SomeType
的超类
适合此模式的经典类型是Integer
,因为它实现了Comparable
到现在为止应该是清楚的。
现在添加的所有内容都是一个简单的super
关键字。
这意味着,SomeType需要与派生层次结构中类型为SomeType
或以上的任何内容相比较。
这基本上有一个优点:您可以稍后从SomeType派生您自己的/其他类型,并且此方法仍然向下兼容!
太棒了,嗯
例如:
class SomeTypeSuper { ... }
class SomeType extends SomeTypeSuper { ... }
// Now, in your code both is valid:
// Asuming the method `yourMethod` expects a `<SomeType extends Comparable<? super SomeType>>` as parameter.
yourMethod(new SomeTypeSuper()); // This wouldn't be valid if we had used Comparable<SomeType>
yourMethod(new SomeType());
class SomeTypeSuper{…}
类SomeType扩展了SomeTypeSuper{…}
//现在,在您的代码中,两者都是有效的:
//Asuming方法'yourMethod'需要一个`
到现在为止应该是清楚的。
现在添加的所有内容都是一个简单的super
关键字。
这意味着,SomeType需要与派生层次结构中类型为SomeType
或以上的任何内容相比较。
这基本上有一个优点:您可以稍后从SomeType派生您自己的/其他类型,并且此方法仍然向下兼容!
太棒了,嗯
例如:
class SomeTypeSuper { ... }
class SomeType extends SomeTypeSuper { ... }
// Now, in your code both is valid:
// Asuming the method `yourMethod` expects a `<SomeType extends Comparable<? super SomeType>>` as parameter.
yourMethod(new SomeTypeSuper()); // This wouldn't be valid if we had used Comparable<SomeType>
yourMethod(new SomeType());
class SomeTypeSuper{…}
类SomeType扩展了SomeTypeSuper{…}
//现在,在您的代码中,两者都是有效的:
//使用“yourMethod”方法需要一个“,这意味着:
SomeType是扩展Comparable
或Comparable
的类
的原因是什么?super-SomeType
是指如果SomeType能够将自身与其他SomeType实例进行比较,则排序过程能够对SomeType实例数组进行排序。如果SomeType扩展了SomeSuperType,并且任何SomeSuperType实例都能够将自身与其他SomeSuperType实例进行比较,则排序将毫无问题地对它们进行比较。这意味着:
SomeType是扩展Comparable
或Comparable
的类
的原因是什么?super-SomeType
是指如果SomeType能够将自身与其他SomeType实例进行比较,则排序过程能够对SomeType实例数组进行排序。如果SomeType扩展了SomeSuperType,并且任何SomeSuperType实例都能够将自身与其他SomeSuperType实例进行比较,则排序将毫无问题地对它们进行比较。Float是Number的子类。我们可以这样宣布:
class Float extends Number implements Comparable<Float>
类浮点扩展了可比较的
但事实上,我们的Float类远不止这些。float类知道如何将自己与整数、Bignums、double等进行比较。事实上,我们的float类知道如何将自己与*any(数字)进行比较
类浮点扩展了可比较的
类Integer扩展了实现可比较的数
事实上:任何数字类都需要这样做,所以真正的声明是
class Number implements Comparable<Number>
class Integer extends Number
class Float extends Number
类号实现可比性
类整数扩展数字
类浮点扩展数字
现在,Compariable接口很酷。如果它没有通配符,那么浮点和整数就不能进行比较
但既然是这样,你可以:
Comparable<Number> array[] = new Comparable<Number>[10];
array[0] = Float.getValue(10);
array[1] = Integer.getValue(11);
sort(array, 0, 1);
Comparable array[]=新的Comparable[10];
数组[0]=Float.getValue(10);
数组[1]=Integer.getValue(11);
排序(数组,0,1);
如果没有>?super t>Float是Number的子类,则无法执行此操作。我们可以这样声明:
class Float extends Number implements Comparable<Float>
类浮点扩展了可比较的
但事实上,我们的Float类比这要广泛得多。Float类知道如何将自己与整数、Bignums、double等进行比较。事实上,我们的Float类知道如何将自己与*any(数字)进行比较
类浮点扩展了可比较的
类Integer扩展了实现可比较的数
事实上:任何数字类都需要这样做,所以真正的声明是
class Number implements Comparable<Number>
class Integer extends Number
class Float extends Number
类号实现可比性
类整数扩展数字
类浮点扩展数字
现在,Compariable接口很酷。如果它没有通配符,那么浮点和整数就不能进行比较
但是s