您的位置:首页 > 编程语言 > Java开发

【Java学习笔记】36:泛型的类型变量的限定

2017-08-30 19:48 495 查看
首先,在泛型编程中的类型参数只能被实例化为引用类型的,而不能是基本类型的。

在这里借用extends关键字做抽象类型的限定,即便是要求这个抽象类型它实现了一个接口。

*对泛型类的限定

package day36;

class MyInt implements Comparable<MyInt>{
int i;

public MyInt(int i) {
this.i = i;
}

@Override
public String toString() {
return i+"";
}

@Override
public int compareTo(MyInt o) {
if(this.i>o.i)
return 1;
else if(this.i<o.i)
return -1;
return 0;
}
}

public class Test {

public static void main(String[] args) {
Integer[] i1={1,4,-5,17};
MyClass<Integer> m1=new MyClass<Integer>();
System.out.println(m1.max(i1)+","+m1.min(i1));

MyInt[] i2={new MyInt(3),new MyInt(-9),new MyInt(7),new MyInt(-10),new MyInt(8)};
MyClass<MyInt> m2=new MyClass<MyInt>();
System.out.println(m2.max(i2)+","+m2.min(i2));

}
}

//这个类必须实现了Comparable接口,即对其做了这样的限定

c1a8
class MyClass<T extends Comparable<T>>{
//获得数组中的最大值
public T max(T[] a){
T m=a[0];
for(T x:a)
{
if(x.compareTo(m)>0)//表示比m大
m=x;
}
return m;
}

//获得数组中的最小值
public T min(T[] a){
T m=a[0];
for(T x:a)
{
if(x.compareTo(m)<0)//表示比m小
m=x;
}
return m;
}
}


运行结果:

17,-5

8,-10

*对泛型方法的限定

package day36;

class MyInt implements Comparable<MyInt>{
int i;

public MyInt(int i) {
this.i = i;
}

@Override
public String toString() {
return i+"";
}

@Override
public int compareTo(MyInt o) {
if(this.i>o.i)
return 1;
else if(this.i<o.i)
return -1;
return 0;
}
}

public class Test {

public static void main(String[] args) {
//这种方式可以共用相同的Class,将泛型做的更彻底
MyClass m=new MyClass();

Integer[] i1={1,4,-5,17};
System.out.println(m.max(i1)+","+m.min(i1));

MyInt[] i2={new MyInt(3),new MyInt(-9),new MyInt(7),new MyInt(-10),new MyInt(8)};
System.out.println(m.max(i2)+","+m.min(i2));

}
}

//在普通类的内部建立泛型方法,并对方法本身作限定
class MyClass{
//获得数组中的最大值
public <T extends Comparable<T>> T max(T[] a){
T m=a[0];
for(T x:a)
{
if(x.compareTo(m)>0)//表示比m大
m=x;
}
return m;
}

//获得数组中的最小值
public <T extends Comparable<T>> T min(T[] a){
T m=a[0];
for(T x:a)
{
if(x.compareTo(m)<0)//表示比m小
m=x;
}
return m;
}
}


运行结果:

17,-5

8,-10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: