zoukankan      html  css  js  c++  java
  • 学习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实现更多的操作,如果这些操作是他们俩所共有的,那么就在泛型中编写;如果是各自所具有的,那么就在他们各自的类中实现即可。

  • 相关阅读:
    DataGridView
    View Designer
    错题集
    MetalKit_1
    倍道而行:选择排序
    ARKit_3_任意门
    ARKit__2_尺子项目
    关于scrollview的无限滚动效果实现
    tableview折叠动效
    NSURLSession的简单使用
  • 原文地址:https://www.cnblogs.com/RainingDays/p/3513623.html
Copyright © 2011-2022 走看看