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

转载于:https://www.cnblogs.com/RainingDays/p/3513623.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Java中的四种访问修饰符分别是什么?它们的作用是什么? 答:Java中的四种访问修饰符是public、protected、default和private。它们的作用如下: - public:公共的,可以被任何访问; - protected:受保护的,可以被同一包内的和不同包中的子访问; - default:默认的,可以被同一包内的访问; - private:私有的,只能被同一内部的方法访问。 2. Java中的final关键字有什么作用? 答:Java中的final关键字有以下作用: - 可以用来修饰、方法和变量,表示它们不可被继承、重写或修改; - 在多线程编程中,可以用来表示一个变量或对象不可被修改,从而保证线程安全; - 在常量声明中,可以用来表示一个常量不可被修改。 3. Java中的静态关键字有什么作用? 答:Java中的静态关键字有以下作用: - 可以用来修饰变量和方法,表示它们属于级别而非对象级别,即所有对象共享同一个静态变量或方法; - 可以用来定义静态代码块,用于在加载时执行一些初始化代码; - 可以用来定义静态内部,表示这个内部只与外部相关,与具体的对象无关; - 可以用来定义静态导入,用于导入一个的静态成员,使其可以直接访问。 4. Java中的抽象和接口有什么区别? 答:Java中的抽象和接口有以下区别: - 抽象可以有构造方法,而接口不能有构造方法; - 抽象可以有非抽象方法,而接口只能有抽象方法; - 一个只能继承一个抽象,而一个可以实现多个接口; - 抽象的子必须实现父的抽象方法,而实现接口的必须实现接口中的所有方法。 5. Java中的重载和重写有什么区别? 答:Java中的重载和重写有以下区别: - 重载是指在同一个定义多个同名的方法,但它们的参数列表不同,返回值可以相同也可以不同;重写是指在子中重新定义中已有的方法,方法名、参数列表和返回值都要相同; - 重载是编译时的多态,根据传入的参数型来决定调用哪个方法;重写是运行时的多态,根据实际的对象型来决定调用哪个方法; - 重载可以发生在同一个中或不同的中;重写只能发生在父子之间。 6. Java中的异常处理机制是什么? 答:Java中的异常处理机制是指当程序出现异常时,程序可以自动捕获异常并进行相应的处理。Java中的异常分为编译时异常和运行时异常,其中编译时异常必须在代码中进行处理,而运行时异常可以不处理。Java中的异常处理机制包括以下关键字: - try:用于捕获异常的代码块; - catch:用于捕获异常并进行处理的代码块; - finally:用于在try或catch块执行完毕后执行的代码块; - throw:用于手动抛出一个异常; - throws:用于声明方法可能抛出的异常。 7. Java中的线程有哪些状态? 答:Java中的线程有以下状态: - 新建状态(New):线程对象被创建但还未调用start()方法; - 就绪状态(Runnable):线程对象调用了start()方法,但还未获得CPU资源; - 运行状态(Running):线程对象获得CPU资源并开始执行run()方法; - 阻塞状态(Blocked):线程对象因为某些原因无法获得需要的资源,如等待I/O操作、等待获取锁等; - 终止状态(Terminated):线程对象执行完了run()方法或者因为异常而中断了运行。 8. Java中的HashMap和Hashtable有什么区别? 答:Java中的HashMap和Hashtable都实现了Map接口,但它们有以下区别: - HashMap是非线程安全的,Hashtable是线程安全的; - HashMap允许null作为key或value,而Hashtable不允许; - HashMap是不保证元素的顺序,而Hashtable是按插入顺序排序的; - HashMap的迭代器是fail-fast的,而Hashtable的迭代器不是。 9. Java中的反射机制是什么? 答:Java中的反射机制是指在程序运行时动态地获取的信息并操作它们的属性、方法和构造函数。Java中的反射机制可以利用Class来获取一个的信息,可以通过Class来获取的名称、属性、方法、构造函数等信息,并可以在运行时动态地创建对象、访问属性和调用方法。 10. Java中的泛型是什么? 答:Java中的泛型是指在编译时不确定具体型的变量或方法,在运行时才确定具体的型。Java中的泛型可以用来增强程序的型安全性和可读性,可以通过定义泛型泛型接口和泛型方法来实现。泛型还可以用来实现集合框架中的容器,如ArrayList、LinkedList等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值