自定义泛型集合
package C12_21;public class abstractList {public static void main(String[] args) {stu<String> stus = new stu<String>();stus.setS("hello");System.out.println(stus.getS());// 灵活, 可以传入任意数据类型。 将运行错误转变为编译错误。stus.show("hhh");}}// 从泛型集合, 可以 学到自定义集合类。
class stu<S, V> {private S s;private V v;public void setS(S s) {this.s = s;}public S getS() {return s;}public void setV(v v) {this.v = v;}public V getV(V v) {return v;}// 自定义泛型方法// 语法:自定义泛型方法 修饰符 + <类型> + 返回值 + 方法名(参数) { 方法体 } public <T> T show(T t) {System.out.println(t);return t;}// 静态泛型方法 类型J和 S,不能一样public static <J> void setObj(J j) {System.out.println(j);}// 下面两个方法是易错的。public static<S> void setObj(S s) { // 无法解析str或str不是字段// System.out.println(s.str);// 正确System.out.println(s); }// 错误, 不能对非静态类型S进行静态引用/*public static void setObj<S s> {System.out.println(s);}*/
}
Result
hello
hhh
自定义泛型接口, Comparable
// 泛型接口A,可以支持多种类型让子类实现。
interface A<O> {
}class B implements A<String> {public void show(String str) {System.out.println(str);}
}
Demo
- Comparable 比较接口就是泛型接口应用的一个经典例子。
- 先看看基本数据类型的compareTo方法
// compareTo 方法的原理System.out.println("a".compareTo("b")); // -1System.out.println("b".compareTo("a")); // 1System.out.println("a".compareTo("a")); // 0System.out.println("a".compareTo("c")); // -2/*** 用正数 表示 左边大于右边, 负数反之* 0 表示两对象相等* 所以,有了用自定义的对象比较,按照年龄,或者名字排序了*/
class Student implements Comparable<Student> {private String name;private int age;public Student() {}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "Student [name=" + name + ", age=" + age + "]";}// 按照年龄比较优先,年龄相等,再姓名public int compareTo(Student stu) {int a = this.age - stu.age;return a == 0 ? this.name.compareTo(stu.name) : a;}}
测试
Student[] stus = new Student[3];stus[0] = new Student("abc", 12);stus[1] = new Student("jb", 18);stus[2] = new Student("abcc", 2);for (Student stu : stus) {System.out.print(stu + "\t"); }// Comparable 接口, 用arrays的sort排序。Arrays.sort(stus);System.out.println("\n" + "排序后");for (Student stu : stus) {System.out.print(stu + "\t");}
结果如下
Student [name=abc, age=12] Student [name=jb, age=18] Student [name=abcc, age=2]
排序后
Student [name=abcc, age=2] Student [name=abc, age=12] Student [name=jb, age=18]