泛型说明
内容纲要

java 泛型的几点说明

  • 泛型有三种:泛型类,泛型接口,泛型方法。这三种泛型声明的位置是不同的。泛型类是在创造类实例的时候需要指明泛型,泛型方法时在调用方法的时候需要指明泛型。
  • 泛型又有字母泛型 T 和泛型通配符 ?。
  • 通配符 ? 在编译器中不是Java的实际类型,编译器将把? 类型识别为临时类型,比如“CAP#1”。这种类型是无法用于任何变量的赋值的。
  • extends和super关键字更常和泛型通配符 ? 使用。<? extends Object> 常常有用于函数入参的声明。
  • extends的用法是一种泛型声明方式,extends这种也只能出现在声明地方。super关键字也是一样。

在类上声明泛型的方式(泛型类)

public class MyClass<T> {  // 在此处进行类的泛型声明
  private T value;
  public T getValue() {
    return value;
  }
  public void setValue(T val) {
    value = val;
  }
}

在方法上声明泛型的方式(泛型方法)

public class MyClass{
  int value;
  public int getValue() {
    return value;
  }

  public <T> T setValue(T val) { // <T> 是泛型方法的声明,返回值是 T
    return val;
  }

  public <T extends Object> T setValue(T val) { // 带有extends的泛型声明
    return val;
  }
}

? 通配符

  • 通配符常常用于变量引用、函数入参的引用声明
  • 通配符无法用于泛型类、泛型接口、泛型函数的声明。
  • 编译器将通配符 ? 类型识别为临时类型,比如“CAP#1”,此时无法为任何Java实际类型赋值。
    public void set(List<? extends Object> value) {}  // 函数入参的引用声明
    List<? super T> list; // 变量引用
    publc class MyClass<? extends Object> {} // 这种使用通配符进行泛型类的声明是错误的,编译报错。

PECS规则

  • Producter Extends, Consumer Super。
  • Extends 对应get方法,Super对应set方法。
  • List<? extends T> list list只有get方法能生效,没有办法set
  • List<? super T> list list只有set方法能生效,没有办法get
hi,我是秋田猫,很高兴认识你,或许我们可以相互分享各自领域的”宝藏“,祝你天天开心~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇