1.泛型类

public class Dog<T> {
private T age; public Dog(T age) {
this.age = age;
} public T getAge() {
return age;
} public static void main(String[] args) {
//Java7之后,尖括号中是不需要填写参数的
Dog<String> dog=new Dog<>("28");
System.out.println(dog.getAge());
}
}

普通的类

public class Dog {
private Object age; public Dog(Object age) {
this.age = age;
} public Object getAge() {
return age;
} public static void main(String[] args) {
Dog dog=new Dog("28");
System.out.println(dog.getAge());
}
}

这样的代码是完全可以执行了,那为什么还需要泛型类?

1.安全性

public class Dog {
private Object age; public Dog(Object age) {
this.age = age;
} public Object getAge() {
return age;
} public static void main(String[] args) {
Dog dog=new Dog("28");
Integer age=(Integer) dog.getAge();
System.out.println(age);
}
}

上面的代码编译是完全可以通过的,但是执行的时候就会出现ClassCastException异常
2.可读性好,省去了反复的强制类型转换。

对于泛型类,java编译器会将泛型代码转换成普通的非泛型代码,

所以对于虚拟机来说,是没有泛型类的概念的。
为什么这么设计呢?应为泛型是jdk6以后才有的,为了向下兼容。

泛型方法:

public class TestMethod {
public static <T> boolean isHas(T[] arr, T elemt){
for(T t:arr){
if(t.equals(elemt)){
return true;
}
}
return false;
}
public <S> boolean isString(S s){
if(s instanceof String){
return true;
}
return false;
} public static void main(String[] args) {
Integer[] arr={1,5,6,8};
System.out.println(isHas(arr,8));
TestMethod testMethod=new TestMethod();
System.out.println(testMethod.isString(5));
}
}

一个方法是不是泛型和他的类是不是泛型没有任何关系。
泛型方法需要在方法的返回值前先声明,在从后面的代码中使用。

泛型接口:
参照Comparable接口。

public class TestComparable implements MyComparable<TestComparable>{

    private Integer n;

    public TestComparable(int n) {
this.n = n;
} @Override
public boolean isEquals(TestComparable testComparable) {
return this.n.intValue()==testComparable.getN().intValue()?true:false;
} public Integer getN() {
return n;
} public static void main(String[] args) {
TestComparable testComparable1=new TestComparable(2);
TestComparable testComparable2=new TestComparable(2);
System.out.println(testComparable1.isEquals(testComparable2));
}
}
interface MyComparable<T> {
boolean isEquals(T t);
}

类型参数继承某个类

/**
* 测试继承class
*/
public class TestInheritClass<T extends Father>{
private T t; public TestInheritClass(T t) {
this.t = t;
} void output(){
System.out.println(t.getName());
} public static void main(String[] args) {
Child child=new Child("李逵");
TestInheritClass<Child> t=new TestInheritClass<>(child);
t.output();
}
}
class Father{
private String name; public String getName() {
return name;
} public Father(String name) {
this.name = name;
}
}
class Child extends Father{
public Child(String name) {
super(name);
} }

测试继承接口

/**
* 测试继承接口
*/
public class TestInheritInterface<T extends IFruits> {
private T t; public TestInheritInterface(T t) {
this.t = t;
}
void output(){
t.shape();
} public static void main(String[] args) {
Apple apple=new Apple();
TestInheritInterface<Apple> t=new TestInheritInterface<>(apple);
t.output();
}
}
interface IFruits{
//形状
void shape();
}
class Apple implements IFruits{
@Override
public void shape() {
System.out.println("苹果是圆形的。");
}
}

java泛型demo的更多相关文章

  1. 全面总结Java泛型

    本文对Java泛型进行了全面的总结.文章内容包括普通泛型.通配符.受限泛型.泛型接口.泛型方法.返回泛型类型实例等等. 虽然Scala创始人Martin Odersky说当年正是因为Java泛型的丑陋 ...

  2. 遇到个小问题,Java泛型真的是鸡肋吗?

    今天遇到一个小问题,让我感觉Java的泛型(因为背负了历史的包袱导致的)有点鸡肋啊. 我们经常会遇到要一些自定义的key-value字符串,比如: "key1:1k;key2:2;key3: ...

  3. Java 泛型(Generics)

    Generics, 类似C++中的模版. 允许在定义类和接口的时候使用类型参数(type parameters), 声明的类型参数在使用的时候用具体的类型来替换. 如 ArrayList<Str ...

  4. JAVA泛型解释

    理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: 1 List<Apple> box = ...; 2 Apple apple ...

  5. java 泛型详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...

  6. Java 泛型在实际开发中的应用

    java泛型是对Java语言的类型系统的一种扩展,泛型的本质就是将所操作的数据类型参数化.下面我会由浅入深地介绍Java的泛型. 一:泛型出现的背景 在java代码里,你会经常发现类似下边的代码: p ...

  7. java 泛型基础问题汇总

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  8. java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)

    JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型.  1.Java泛型  其实Java ...

  9. Java泛型用法总结

    普通泛型 class Point< T>{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T ...

随机推荐

  1. C++——一维数组

    6.数组 指针与字符串 6.1 数组 数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量成为数组的元素.数组属于构造类型. 一维数组的声明: 类型说明符 数组名[常量表达式],若int ...

  2. C++ 实例练习-替换原生数组

    C++ 实例练习-替换原生数组 main.cpp #include <stdio.h> #include "intarray.h" int main(int argc, ...

  3. ORA-01830

    问题:varchar2类型转换成date类型 select to_date(INVOICE_DATE,'yyyy-mm-dd') from tab; 提示 ORA-01830: 日期格式图片在转换整个 ...

  4. 在Linux服务器上安装Python3.7

    我的Linux版本是CentOS 6,自带2.7版本的Python.源码安装和系统中默认存在的Python不冲突. 1.在Python官网下载源码包,进入官网https://www.python.or ...

  5. 2分钟就能学会的【Google/百度搜索大法】了解一下?

    之前我在知乎回答了「日常生活中有哪些十分钟就能学会并可以终生受用的技能」,现在也整理分享给公众号的朋友们. 作为一个入坑8年国际贸易的老阿姨,真心推荐[google搜索大法](同样适用于百度). 2分 ...

  6. codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)

    题目链接:http://codeforces.com/problemset/problem/1204/C 给定一组序列,P1,P2,P3...Pm,这是一组合法路径的序列,即任意的Pi和Pi+1之间有 ...

  7. Pandas 数据分析——超好用的 Groupby 详解

    在日常的数据分析中,经常需要将数据根据某个(多个)字段划分为不同的群体(group)进行分析,如电商领域将全国的总销售额根据省份进行划分,分析各省销售额的变化情况,社交领域将用户根据画像(性别.年龄) ...

  8. docker 初识1

    学习网址 https://git.oschina.net/yangllsdev/docker-training https://docs.docker.com/engine/installation/ ...

  9. bugku 变量1

    变量1 题目信息 flag In the variable ! <?php error_reporting(0); include "flag1.php"; highligh ...

  10. [2020BUAA软工助教]第1次个人作业

    热身作业(阅读) 一.前言 我认为人生就是一次次地从<存在>到<光明>. 二.软件工程师的成长 博客索引 同学们在上这门课的时候基本都是大三,觉得在大学里,到教室来听课有意思么 ...