package com.direct.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map; public class Fanxing {
public static void main(String[] args) {
Gen<String> gen = new Gen<String>("xiaonbai");
System.out.println(gen.getT());
gen.show();
Gen<? extends List> gen2 = null;//通配符的使用 必须是List或者List的子类
gen2 = new Gen<ArrayList>();//无参的构造方法
gen2 = new Gen<LinkedList>();
List list = new ArrayList();
gen2 = new Gen<List>(list);//有参的构造方法,参数是实例化对象
System.out.println("----------------------------------------");
List<Integer> list2 = new ArrayList<Integer>();
list2.add(123);
list2.add(456);
List<Long> list3 = new ArrayList<Long>();
list3.add(345L);
list3.add(42L);
gen.print(list2);
gen.print(list3);
gen.print2(list2);
System.out.println("----------------------------------------");
Goods goods = new Goods("加多宝", 100);
MyClass<Goods> mClass = new MyClass<Goods>();
mClass.display(goods);
//分页
Map<String, Object> map = new HashMap<String, Object>();
map.put("pageNo", 5);//页数5
map.put("pageSize", 20);//每天20条
map.put("pageCount", 1000);//共1000
map.put("goods", goods);//存放的是Goods类型
MyClass<Map<String, Object>> mymap = new MyClass<Map<String,Object>>(); }
} //泛型类
class Gen<T>{
private T t1;//泛型成员变量
//泛型构造函数
public Gen(T t1){
this.t1 = t1;
}
public Gen() {
// TODO Auto-generated constructor stub
}
public T getT(){
return t1;
}
public <T> void show(){
System.out.println("----->"+t1);
}
public void print(List<? extends Number> list){
System.out.println(list.get(0));//只能取值,不能设置(add())
//list.add("haohao");
}
public void print2(List<? super Integer> li){
System.out.println("super");
System.out.println(li.get(0));//向上 可以取值,也可设值
li.add(230);
for (int i = 0; i < li.size(); i++) {
System.out.println(li.get(i));
}
}
} //泛型接口
interface Iennter<Q>{
//接口没有构造方法
public void display(Q q);
} //接口的一个实现类
class MyClass<Q> implements Iennter<Q>{
@Override//Q是类型
public void display(Q q) {
System.out.println(q);//q为对象引用
}
} class Goods{
private String name;
private int num;
public Goods(String name,int num){
this.name = name;
this.num = num;
}
@Override
public String toString() {
return "Goods [name=" + name + ", num=" + num + "]";
} }

  

java 自定义泛型的更多相关文章

  1. java自定义泛型 面试题:接收任意数组进行反转 泛型通配符

    不用泛型只能操作某种类型进行反转 代码如下: package com.swift.fanxing; import org.junit.Test; public class RenyiReverse { ...

  2. java JDK8 学习笔记——第18章 自定义泛型、枚举与注释

    第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 ...

  3. JAVA基础_自定义泛型

    泛型的来源 在Java中,泛型借鉴了C++的模版函数,从而引入了泛型. C++泛型 int add(int x,int y){ return x + y; } float add(float x.fl ...

  4. Java笔记--泛型总结与详解

    泛型简介: 在泛型没有出来之前,编写存储对象的数据结构是很不方便的.如果要针对每类型的对象写一个数据结构,     则当需要将其应用到其他对象上时,还需要重写这个数据结构.如果使用了Object类型, ...

  5. 跟着刚哥梳理java知识点——泛型(十三)

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...

  6. Java 容器 & 泛型:五、HashMap 和 TreeMap的自白

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...

  7. Java自定义注解和运行时靠反射获取注解

    转载:http://blog.csdn.net/bao19901210/article/details/17201173/ java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编 ...

  8. Net is as typeof 运行运算符详解 net 自定义泛型那点事

    Net is as typeof 运行运算符详解   概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Ti ...

  9. java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...

随机推荐

  1. verify验证插件的详解

    使用此验证插件,我们只需要新建一个实例对象,同时传入一个json对象就行了,这里我们只传入了两个属性:checkItem和callback.下面的代码解析,我们就按照这个例子来. var verify ...

  2. java----session

    什么是session? 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),也就是说他是保存在服务端的.注意:一个浏览器独占一个session对象(默认情况下).因此,在 ...

  3. TPS和QPS定义以及影响TPS的因素

    一.TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数.TPS包括一条消息入和一条消息出,加上一次用户数据库访问.(业务TPS = CAPS × ...

  4. 学习前端页面css定位

    css元素框定位 一.相对定位: 相对定位是一个非常容易掌握的概念.如果对一个元素进行相对定位,它将出现在它所在的位置上.然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动.pos ...

  5. QuantLib 金融计算——数学工具之插值

    目录 QuantLib 金融计算--数学工具之插值 概述 一维插值方法 二维插值方法 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之插值 载入模块 ...

  6. 技巧方法 - CentOS6将Python2.6.6升级到Python2.7.6

    1.首先使用“python -V”命令查看python版本,我们测试主机显示的是2.6.6版,于是下面就着手将python2.6.6升级到Python2.7.6.python -V #查看python ...

  7. OpenERP中自定义模块卸载失败,Postgres数据库删不掉数据库,OpenERP登录不了一直在加载的问题解决方案。

    解决方案也就是删除掉不用的数据库,OE会提示当前有N个Session不让Drop数据库. 对于Postgres 9.1 版本,在pgAdmin中查询以下语句: SELECT pg_terminate_ ...

  8. java_Proxy动态代理_AOP

    讲了JDK里使用Proxy动态代理的机制,详细过程. 切面类TransactionHandler需要实现InvocationHaandler接口,实现它的invoke方法. 项目目录: User类代码 ...

  9. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  10. Java MySQL(SqlHelper)

    1.配置文件为: driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/user_info user=root passwor ...