编写泛型类比普通的类要麻烦,而且很少编写泛型类。

1.编写一个泛型类:

  • 按照某种类型(例如String)编写类
  • 标记所有的特定类型例如String
  • 把特定类型替换为T,并申明



    Pair.java
package com.testArray;

public class Pair<T> {
private T fisrt;
private T last;
public Pair(T first,T last){
this.fisrt=first;
this.last=last;
}
public T getFisrt(){
return fisrt;
}
public T getLast(){
return last;
}
}

Main.java

package com.testArray;

import java.util.ArrayList;

public class Main {
public static void main(String[] args){
Pair<String> p = new Pair<String>("小明", "小红");
String first = p.getFisrt();
String last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}


## 2.泛型类包含静态方法
注意:
泛型类型不能用于静态方法:
* 编译错误
* 编译器无法在静态字段或静态方法中使用泛型类型


* 静态方法可以单独改写为泛型方法
网上有种解决方法,在static后面加上,就解决了报错问题。但此处static方法中的和上面Pair类中的不一样,为了避免混淆,应该将替换为。
```#java
public static Pair create(T first,T last){
return new Pair(first,last);
}
```
```#java
package com.testArray;

public class Pair {

private T fisrt;

private T last;

public Pair(T first,T last){

this.fisrt=first;

this.last=last;

}

public T getFisrt(){

return fisrt;

}

public T getLast(){

return last;

}

static Pair create(K first,K last){

return new Pair(first,last);

}

}

```#java
package com.testArray; public class Main {
public static void main(String[] args){
Pair<String> p = Pair.create("小明", "小红");
String first = p.getFisrt();
String last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}

3.泛型可以定义多种类型

Pair.java

package com.testArray;

public class Pair<T,K> {
private T fisrt;
private K last;
public Pair(T first,K last){
this.fisrt=first;
this.last=last;
}
public T getFisrt(){
return fisrt;
}
public K getLast(){
return last;
}
}

Main.java

package com.testArray;

public class Main {
public static void main(String[] args){
Pair<String,Integer> p = new Pair<String,Integer>("小明", 12);
String first = p.getFisrt();
Integer last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}

4.总结:

  • 编写泛型时,需要定义泛型类型

    * public class Pair{...}
  • 静态方法不能引用泛型类型,必须定义其他类型来实现范型

    * public static Pair create(K first, K last){...}
  • 泛型可以同时定义多种类型<T,K>

    * public class Pair<T,K>{...}

廖雪峰Java4反射与泛型-3范型-3编写泛型的更多相关文章

  1. 廖雪峰Java4反射与泛型-3范型-4擦拭法

    1.擦拭法是Java泛型的实现方式. 编译器把类型视为Object. * 泛型代码编译的时候,编译器实际上把所有的泛型类型T统一视为Object类型.换句话说,虚拟机对泛型一无所知,所有的工作都是编译 ...

  2. 廖雪峰Java4反射与范型-3范型-1什么是泛型

    1.为什么需要泛型? JDK提供了ArrayList,可以看作"可变长度"的数组: 比数组使用方便 示例1:如果使用ArrayList存储String类型: 需要强制转型 不方便, ...

  3. 廖雪峰Java4反射与泛型-3泛型-7泛型和反射

    1.部分反射API是泛型 1.1获取反射API的泛型 部分反射API是泛型,如Class<T>是泛型 //如果使用Class,不带泛型,出现compile warning编译警告 Clas ...

  4. 廖雪峰Java4反射与泛型-3范型-6super通配符

    1.super通配符 1.1super通配符第一种用法 泛型的继承关系 Pair<Integer>不是Pair<Number>的子类,如 static void set(Pai ...

  5. 廖雪峰Java4反射与泛型-3范型-5extends通配符

    1.泛型的继承关系: Pair<Integer>不是Pair<Number>的子类 add()不接受Pair<Integer> Pair.java package ...

  6. 廖雪峰Java4反射与泛型-2注解-3处理注解

    1.处理注解 注解本身对对代码逻辑没有任何影响 SOURCE类型的注解在编译期就被丢掉了 CLASS类型的注解仅保存在class文件中 RUNTIME类型的注解在运行期可以被读取 如何使用注解由工具决 ...

  7. 廖雪峰Java4反射与泛型-1反射-2访问字段Field和3调用方法Method

    2.字段Field 2.1.通过Class实例获取字段field信息: getField(name): 获取某个public的field,包括父类 getDeclaredField(name): 获取 ...

  8. 廖雪峰Java4反射与泛型-1反射-1Class类

    1.Class类与反射定义 Class类本身是一种数据类型(Type),class/interface的数据类型是Class,JVM为每个加载的class创建了唯一的Class实例. Class实例包 ...

  9. 廖雪峰Java4反射与泛型-2注解-2定义注解

    1.定义注解 使用@interface定义注解Annotation 注解的参数类似无参数方法 可以设定一个默认值(推荐) 把最常用的参数命名为value(推荐) 2.元注解 2.1Target使用方式 ...

随机推荐

  1. Kafka设计解析:Kafka High Availability

    Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永远不能再恢复,亦 ...

  2. linux下使用小票打印

    linux下使用小票打印 打印机: Xprinter XP-58IIH指令支持: ESC/POS接口: USB, 蓝牙 Linux系统: Centos7 蓝牙配对很快, 配对好后就是连接状态. 但很快 ...

  3. 计算x

    如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...

  4. C++学习(九)(C语言部分)之 项目 推箱子游戏

    游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...

  5. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法

    转载至:https://blog.csdn.net/wo541075754/article/details/76651073 RHS语法 使用说明 RHS是满足LHS条件之后进行后续处理部分的统称,该 ...

  6. Node学习笔记2:建立HTTP服务器和客户端之间的通信

    http服务器端: var http = require('http'); var server = http.createServer(); server.on('request', functio ...

  7. get android or ios appname

    get app name from GP or itunes var superagent = require('superagent'); var cheerio = require('cheeri ...

  8. Gravitee.io alert 引擎架构

    alert 在我们的实际开发中应用的场景很多,我们需要进行系统状态的查看,以及特殊异常请求的处理 参考架构图 从下图可以看出,还是很方便的,同时支持slack email... 的实时消息通知,而且我 ...

  9. Be Careful When Using Bit Field

    Below illustration is based on MSP430, IAR. See the implementation below. typedef struct { uint8_t g ...

  10. supervisorctl 常用命令

    命令官方文档:http://supervisord.org/running.html#running-supervisorctl supervisorctl 常用命令: supervisorctl 常 ...