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

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

学习java之利用泛型访问自己定义的类的更多相关文章

  1. java实现利用httpclient访问接口

    HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源. HTTPClient提供的主要功能: 1.实现了所有HTTP的方法(GET ...

  2. 手动编译含package的java源程序(包含外部包中定义的类)

    1)定义一个GSM类,如下: 包名是“SRC.GSM”,并且此程序引用了外部jar包.使用javac命令对GSM.java进行编译: GSM.java所在的文件夹如下所示: 切换到这个目录为当前工作目 ...

  3. 【转】【Java】利用反射技术,实现对类的私有方法、变量访问

    java关于反射机制的包主要在java.lang.reflect中,structs,hibernate,spring等框架都是基于java的反射机制. 下面是一个关于利用java的反射机制,实现了对私 ...

  4. Java 控制台执行带自定义包定义的类,出现“Exception in thread "main" java.lang.NoClassDefFoundError: ConnectSQLServer (wrong name: sine/ConnectSQLServer)”

    1.先说明一下代码实现:自定义package sine, 源代码保存路径为:E:\JSP\HibernateDemo\HibernateDemoProject\src\sine\ConnectSQLS ...

  5. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  6. 学习Java的Day04

    知识点 接口: 1.接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 2. 接口中只允许出现抽象方法,不能出现非抽象方法 3. 接口的源文件也是java文件,编译后的文件也是. ...

  7. Java泛型学习笔记 - (七)浅析泛型中通配符的使用

    一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...

  8. 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...

  9. Java泛型:泛型的定义(类、接口、对象)、使用、继承

    地址   http://blog.csdn.net/lirx_tech/article/details/51570138 1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题 ...

随机推荐

  1. ios网站,博客

    中文 网站系列 objcio.cncocoachina.comcode4app.com泰然网 博客系列唐巧地球人都知道哈.http://blog.devtang.com/巧哥新出书了,速度入手吧. 虾 ...

  2. GridControl的列显示成图片+文字,并且不同的文字对应不同的图片

    public static void SetDispatchStatus(GridView aGridView1, GridColumn aColStatus, bool aOnlyImage) { ...

  3. hdu 4759 Poker Shuffle 二进制

    思路:主要是二进制的运用. 为了方便从0开始,首先看下右移一下,高位异或1的规律:(可以从右往左一列一列看) 000(0) -> 100(4) -> 110(6) -> 111(7) ...

  4. 二叉查找树的查找、插入和删除 - Java实现

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 作者: yangecnu(yangecnu's Blog on ...

  5. Things about single men that women hate

    Things about single men that women hate为何你俘获不了女神的心?If you listen in to a group of single women talki ...

  6. 【golang】用container/list实现栈(Stack)

    go语言中的container有heap.list.ring,没有stack. 其中heap是优先级队列,虽然有Push()/Pop()接口,但是使用heap要实现heap.Interface接口,不 ...

  7. QStandardItemModel简单好用,QTableView带进度条

    类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据.与此不 ...

  8. 分析函数(Analytic Functions)

    在OLAP这类系统或者DW这类数据库中,作为某份报表的数据源,我们常常需要在某个存储过程中编写复杂的运算代码来汇总数据.分析函数便具备这样的能力,引用多行的数据值来进行多层面的聚合运算,在数据子集中进 ...

  9. 机器人学 —— 机器人视觉(Bundle Adjustment)

    今天完成了机器人视觉的所有课程以及作业,确实是受益匪浅啊! 最后一个话题是Bundle Adjustment. 机器人视觉学中,最顶尖的方法. 1.基于非线性优化的相机位姿估计 之前已经在拟合一篇中, ...

  10. Linux上的运行的jar包

    以调用json-simple为例 java程序(CsvTest.java) import org.json.simple.JSONObject; import java.util.*; public ...