mirror of
https://github.com/youthlql/JavaYouth.git
synced 2026-03-14 05:43:50 +08:00
补充图片
This commit is contained in:
@@ -1,3 +1,22 @@
|
||||
---
|
||||
title: 详解JDK8新特性
|
||||
tags:
|
||||
- Java8
|
||||
- JDK8
|
||||
- 新特性
|
||||
categories:
|
||||
- Java
|
||||
- 新特性
|
||||
keywords: Java8,新特性,JDK8
|
||||
description: 详解JDK8出现的新特性。
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/Java_Basis/javabasis_logo.png'
|
||||
top_img: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/blog/top_img.jpg'
|
||||
abbrlink: de3879ae
|
||||
date: 2020-10-19 22:15:58
|
||||
---
|
||||
|
||||
|
||||
|
||||
# Java8新特性纵览
|
||||
|
||||
> 本篇文章只讲解比较重要的
|
||||
@@ -1456,7 +1475,7 @@ public class SuperClass {
|
||||
|
||||
|
||||
|
||||
```
|
||||
```java
|
||||
public interface CompareB {
|
||||
|
||||
default void method3(){
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
---
|
||||
title: 详解JDK8新特性
|
||||
tags:
|
||||
- Java
|
||||
- 基础
|
||||
- 泛型
|
||||
categories:
|
||||
- Java
|
||||
- 新特性
|
||||
keywords: Java基础,泛型
|
||||
description: 万字长文详解Java泛型。
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/Java_Basis/javabasis_logo.png'
|
||||
top_img: 'https://cdn.jsdelivr.net/gh/youthlql/lql_img/blog/top_img.jpg'
|
||||
abbrlink: de3879ae
|
||||
date: 2020-10-19 22:21:58
|
||||
---
|
||||
|
||||
|
||||
|
||||
# 简介
|
||||
|
||||
## 泛型的优点
|
||||
@@ -10,7 +29,7 @@
|
||||
|
||||
那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。
|
||||
|
||||
```
|
||||
```java
|
||||
public class GlmapperGeneric<T> {
|
||||
private T t;
|
||||
public void set(T t) { this.t = t; }
|
||||
@@ -642,28 +661,30 @@ Process finished with exit code 0
|
||||
|
||||
即:**如果静态方法要使用泛型的话,必须将静态方法也定义成泛型方法** 。
|
||||
|
||||
public class StaticGenerator<T> {
|
||||
|
||||
/**
|
||||
* 1、如果在类中定义使用泛型的静态方法,需要添加额外的泛型声明(将这个方法定义成泛型方法)
|
||||
* 即使静态方法要使用泛型类中已经声明过的泛型也不可以。
|
||||
* 如:public static void show(T t){..},此时编译器会提示错误信息:
|
||||
"StaticGenerator cannot be refrenced from static context"
|
||||
* 2、泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。换句话说,
|
||||
* 泛型方法所属的类是不是泛型类都没有关系。
|
||||
* 3、泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在初始化类时确定,所以无所谓
|
||||
*/
|
||||
public static <E> List<E> copyFromArrayToList(E[] arr){
|
||||
|
||||
ArrayList<E> list = new ArrayList<>();
|
||||
|
||||
for(E e : arr){
|
||||
list.add(e);
|
||||
}
|
||||
return list;
|
||||
```java
|
||||
public class StaticGenerator<T> {
|
||||
|
||||
/**
|
||||
* 1、如果在类中定义使用泛型的静态方法,需要添加额外的泛型声明(将这个方法定义成泛型方法)
|
||||
* 即使静态方法要使用泛型类中已经声明过的泛型也不可以。
|
||||
* 如:public static void show(T t){..},此时编译器会提示错误信息:
|
||||
"StaticGenerator cannot be refrenced from static context"
|
||||
* 2、泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。换句话说,
|
||||
* 泛型方法所属的类是不是泛型类都没有关系。
|
||||
* 3、泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在初始化类时确定,所以无所谓
|
||||
*/
|
||||
public static <E> List<E> copyFromArrayToList(E[] arr){
|
||||
|
||||
ArrayList<E> list = new ArrayList<>();
|
||||
|
||||
for(E e : arr){
|
||||
list.add(e);
|
||||
}
|
||||
return list;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -1565,7 +1586,7 @@ class keyAndDifficultPoints/principle/Test_Generic1 {
|
||||
|
||||
如果顺序变一下
|
||||
|
||||
```
|
||||
```java
|
||||
class Test_Generic1<T extends Collection & List>
|
||||
```
|
||||
|
||||
@@ -1573,7 +1594,7 @@ class Test_Generic1<T extends Collection & List>
|
||||
|
||||
T变成了Collection
|
||||
|
||||
```
|
||||
```java
|
||||
// class version 52.0 (52)
|
||||
// access flags 0x20
|
||||
// signature <T::Ljava/util/Collection;:Ljava/util/List;>Ljava/lang/Object;
|
||||
@@ -1798,7 +1819,7 @@ test4(queue);
|
||||
|
||||
在调用泛型方法的时候,可以指定泛型,也可以不指定泛型。在不指定泛型的情况下,泛型变量的类型为 该方法中的几种类型的同一个父类的最小级,直到Object。在指定泛型的时候,该方法中的几种类型必须是该泛型实例类型或者其子类。
|
||||
|
||||
```
|
||||
```java
|
||||
class Test {
|
||||
public static void main(String[] args) {
|
||||
//不指定泛型的时候
|
||||
|
||||
Reference in New Issue
Block a user