学习java之利用泛型访问自己定义的类

  如果有多个类,而且他们其中有一些方法是相同的,我是选择在每个类中都把这些方法实现一遍呢,还是选择泛型。我今天自己花了一点时间看了看泛型,实践了一下。

Holder.java

package regexp;

import java.util.Collection;
import java.util.Iterator;
import java.util.Set;

public class Holder<T> {
    private T a;    
    public Holder(T a) { this.a = a;}    
    public void set(T a) { this.a = a;}
    public T get() { return a;}
    
    public static void main(String[] args) {
        Holder<A> h1 = new Holder<A>(new A());
        A a = h1.get();
        a.id = a.score = 1;
        Holder<B> h2 = new Holder<B>(new B());
        B b = h2.get();
        b.id = 2;
        b.name = "2";
        System.out.printf("A: id = %d ,  score = %d ; B: id = %d , name = %s%n",a.id,a.score,b.id,b.name);
    }
}


class A {
    public A() {
        
    }
    
    int id;
    int score;
}

class B {
    public B() {
        
    }
    
    int id;
    String name;
}

如果要对这些类做一些操作,比如说要把他们的对象排个序什么的。那咱可以把上述代码改成下面这样:

package regexp;

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class Holder<T> {
    private T a;    
    public Holder(T a) { this.a = a;}    
    public void set(T a) { this.a = a;}
    public T get() { return a;}
    
    public static void main(String[] args) {
        List<A> la = new LinkedList<A>();
        Holder<A> h1 = new Holder<A>(new A());
        A a = h1.get();
        a.id = a.score = 1;
        la.add(a);
        a.id = a.score = 2;
        la.add(a);
        List<B> lb = new LinkedList<B>();
        Holder<B> h2 = new Holder<B>(new B());
        B b = h2.get();
        b.id = 2;
        b.name = "2";
        lb.add(b);
        b.id = 3;
        b.name = "3";
        lb.add(b);
        
        //自定义比较器
        Collections.sort(la,new Comparator<A>() {
            public int compare(A a,A b) {
                if(a.id != b.id) {
                    return a.id - b.id;
                } else {
                    return a.score - b.score;
                }
            }
        });//这里只是举了个例子对la操作了一下
        System.out.printf("A: id = %d ,  score = %d ; B: id = %d , name = %s%n",a.id,a.score,b.id,b.name);
    }
}


class A {
    public A() {
        
    }
    
    int id;
    int score;
}

class B {
    public B() {
        
    }
    
    int id;
    String name;
}

如果还需要对A,B实现更多的操作,如果这些操作是他们俩所共有的,那么就在泛型中编写;如果是各自所具有的,那么就在他们各自的类中实现即可。

posted on 2014-01-10 13:55  Raining Days  阅读(211)  评论(0编辑  收藏  举报

导航