泛型编程是通过使用继承的一些基本概念来完成的,
这会学习的是java中使用继承的基本原则来实现泛型方法的。
两个数的置换。
public static void swap(Object a,Object b){
Object temp = a;
a = b;
b = temp;
}
java中的基本思想是通过使用像Object这样适当的超类来实现泛型类。
public class MemoryCell {
private Object storeValue;
public Object get () {
return storeValue;
}
public void set (Object x){
storeValue = x;
}
}
public class TestMemoryCell() {
public static void main(String[] args){
MemoryCell m = new MemoryCell();
m.set("123");
String val=(String) m.get();
System.out.println("Contents are : " + val);
}
}
在这个TestMemoryCell类中,描述了一个main方法,将字符串“123”写到
MemoryCell对象中,然后又重MemoryCell对象中读出。当然此处也可以不必
强制转换,可以调用toString()方法,这种调用对任意对象都是能够做到的。
public class WrapperExamp {
public static void main(String[] args){
MemoryCell m = new MemoryCell();
m.set(new Integer(123));
Integer wrapperVal = (Integer)m.get();
int val = wrapperVal.intValue();
System.out.println("Contents are: " + val);
}
}
基本类型不能作为Object类进行传递,因为只有引用类型才能够
与Object类相容,java中的 8 种基本类型都不能。这个问题的解决方法
是利用java为这 8种基本类型的每一个所提供的对应包装类。
例如int类的包装类是Integer。
每个包装类其状态都是绝不能变得,它储存一种但该对象被构建时所设置得原值,
并提供了一种方法以重新获得该值。
包装类中也包含不少的静态使用方法。
使用Comparable接口类型表示泛型
只有但是用Object类中已有的方法来表示执行的操作时,才能使用Object类
作为泛型类型工作。
这里是Comparable 接口类型找数组元素中的最大值,可以使用compareTo方法,
它在实现Comparable接口的类中加以实现,故他对所有的Comparable接口都有
现成可以用的。
public class FindMaxExamp {
public static Comparable findMax(Comparable [] a){
int k = 0;
for(int i = 1;i < a.length; i++)
if(a[i].compareTo(a[k]) > 0)
k=i;
return a[k];
}
public static void main(String[] args){
Shape[] sh1 = {new Circle(2.0),new Square(3.0),new Rectangle(3,4)};
String[] st1 = {"Joe", "Bob", "Bill" , "Zeke"};
System.out.println(findMax(sh1));
System.out.println(findMax(st1));
}
}
1. 只有实现了Comparable接口的对象才能作为数组元素进行参数传递。
仅有compareTo方法但未宣称实现Comparable接口的对象不是属于Comparable,
因为它不具有必要的IS-A关系。
Circle,Square,Rectangle都是Shape的子类。
2. 若属于Comparable接口类型的数组有两个不相容的对象对象,
那么compareTo方法将抛出异常ClassCast、Exception。
3.基本类型是不能作为Comparable接口类型进行传递的,但包装类可以,因为
它们实现了接口。