当前位置: 首页 > wzjs >正文

网站建设的售后保健品的营销及推广方案

网站建设的售后,保健品的营销及推广方案,青岛网站建设青岛新思维,商城多用户源码文章目录131. Java 泛型 - 目标类型与泛型推断**1. 什么是目标类型?****2. 目标类型的作用****✅ 示例 1:使用 Collections.emptyList()****3. 目标类型在方法调用中的应用****✅ 示例 2:目标类型在方法参数中的应用****🔍 解释**…

文章目录

  • 131. Java 泛型 - 目标类型与泛型推断
    • **1. 什么是目标类型?**
    • **2. 目标类型的作用**
      • **✅ 示例 1:使用 `Collections.emptyList()`**
    • **3. 目标类型在方法调用中的应用**
      • **✅ 示例 2:目标类型在方法参数中的应用**
      • **🔍 解释**
    • **4. 目标类型适用于哪些场景?**
    • **5. 目标类型在 Lambda 表达式中的应用**
      • **✅ 示例 3:目标类型与 Lambda 表达式**
    • **6. 目标类型的局限性**
      • **❌ 示例 4:编译器无法推断类型**
    • **7. 结论**

131. Java 泛型 - 目标类型与泛型推断

Java 泛型中,目标类型(Target Type 是编译器用来推断泛型方法调用类型参数的关键概念。目标类型决定了 Java 编译器期望的返回值类型,从而让编译器在方法调用时进行类型推断。

1. 什么是目标类型?

目标类型指的是一个表达式所需的数据类型,它通常取决于表达式所在的上下文Java 编译器使用目标类型来推断泛型方法的类型参数,以减少冗余代码,并提高代码的可读性和可维护性。


2. 目标类型的作用

Java 7 及更高版本中,目标类型使得泛型方法调用能够省略类型参数,而让编译器根据上下文自动推断合适的类型。

✅ 示例 1:使用 Collections.emptyList()

import java.util.Collections;
import java.util.List;public class TargetTypeDemo {public static void main(String[] args) {// 目标类型是 List<String>List<String> listOne = Collections.emptyList();// 等效于:List<String> listTwo = Collections.<String>emptyList();System.out.println("listOne 类型:" + listOne.getClass());System.out.println("listTwo 类型:" + listTwo.getClass());}
}

解释

  • Collections.emptyList() 是一个泛型方法,返回 List<T> 类型。
  • 目标类型 List<String> 告诉编译器,T 应该是 String
  • Java 7+ 允许省略 <String>,编译器会自动推断
  • 这简化了代码,提高了可读性。

3. 目标类型在方法调用中的应用

✅ 示例 2:目标类型在方法参数中的应用

import java.util.Collections;
import java.util.List;public class TargetTypeDemo {// 需要一个 List<String> 作为参数static void processStringList(List<String> stringList) {System.out.println("列表大小:" + stringList.size());}public static void main(String[] args) {// 在 Java 7 中,这将无法编译// processStringList(Collections.emptyList()); // ❌ 编译错误// 在 Java 7,需要显式指定泛型类型processStringList(Collections.<String>emptyList()); // ✅// 在 Java 8+,目标类型允许省略泛型类型processStringList(Collections.emptyList()); // ✅}
}

🔍 解释

在 Java 7 中:

  • Collections.emptyList() 返回 List<T>,但 T 的值不明确。
  • Java 7 编译器会将 T 推断为 Object,因此 List<Object> 不能转换为 List<String>,导致编译错误。
  • 解决方案:需要显式指定 T 的类型,即 Collections.<String>emptyList()

在 Java 8+:

  • 目标类型 机制改进,方法 processStringList(List<String>) 需要 List<String>,编译器就能推断 T = String,因此 Collections.emptyList() 可以直接使用。

4. 目标类型适用于哪些场景?

Java 8 以后,目标类型的概念被扩展到以下场景:

场景示例
变量赋值List<String> list = Collections.emptyList();
方法参数processStringList(Collections.emptyList());
返回值return Collections.emptyList();
Lambda 表达式Predicate<String> predicate = s -> s.isEmpty();

5. 目标类型在 Lambda 表达式中的应用

Java 8 引入了 Lambda 表达式,目标类型也被扩展到了 Lambda 表达式,使得代码更加简洁。

✅ 示例 3:目标类型与 Lambda 表达式

import java.util.function.Predicate;public class LambdaTargetTypeDemo {public static void main(String[] args) {// 目标类型:Predicate<String> 期望一个 (String) -> boolean 类型的函数Predicate<String> predicate = s -> s.isEmpty();System.out.println(predicate.test(""));  // trueSystem.out.println(predicate.test("Java"));  // false}
}

🔍 解释

  • Predicate<String> 作为目标类型,它的 test(T t) 方法期望 T = String
  • Lambda 表达式 s -> s.isEmpty() 被推断为 Predicate<String>

6. 目标类型的局限性

虽然目标类型可以让 Java 编译器自动推断泛型类型,但有些情况下,仍然需要显式指定泛型类型,否则会遇到编译错误。

❌ 示例 4:编译器无法推断类型

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class TargetTypeLimitDemo {public static void main(String[] args) {List<?> list = Collections.emptyList(); // ✅ 编译通过// List<?> 无法确定 T 的具体类型,使用 List<Object> 仍可兼容List<Object> list2 = Collections.emptyList(); // ✅ 编译通过// 因为 List<Object> 可以接收 List<T>,T 可以是 ObjectList<Object> list3 = new ArrayList<>(); // ✅ 编译通过// Java 7+ 支持钻石操作符(<>)// ❌ 目标类型不明确,编译失败// var list4 = Collections.emptyList(); // Java 10+ 语法,编译错误}
}

🔍 解释

  • List<?> 可以接收 Collections.emptyList(),因为它可以是任意 T
  • var 不能用于推断泛型类型,因为 var 依赖于显式类型声明

7. 结论

目标类型 允许 Java 编译器根据上下文推断泛型方法的类型参数,提高代码可读性。
Java 8+ 改进了目标类型,使其适用于方法参数变量赋值返回值Lambda 表达式
仍然有局限性,某些情况下(如 var 语法)编译器仍然无法自动推断类型,需要显式声明泛型参数。


通过目标类型,Java 泛型变得更简洁、灵活,大大减少了不必要的冗余代码!🚀

http://www.dtcms.com/wzjs/144576.html

相关文章:

  • 常州网页百度提升优化
  • 海南做网站公司深圳外贸网站建设
  • 推荐一些可以做笔试题的网站客户管理系统
  • 可以做专利聚类分析的免费网站网络软文写作
  • web前端工程师是什么键词优化排名
  • b2c 网站 方案网站策划是什么
  • 正规网站建设咨询电话广告软文是什么意思
  • 潍坊网站建设方案外包百度信息流推广
  • 学校网站构建百度关键词多少钱一个月
  • 深圳 建设银行国际互联网站免费推广方式都有哪些
  • 网站做跳转微信打开网站推广渠道
  • 网站更换主机注意阿里巴巴国际贸易网站
  • 大麦网网站建设的功能定位百度获客平台
  • 女的和男的做那个视频网站b2b网站推广排名
  • 网站建设公司价格差别写一篇推广商品的软文
  • 关于做网站的搞笑段子如何做好营销
  • 东莞网站优化公司推荐域名购买平台
  • 网站做贩卖毕业论文合法吗俄罗斯搜索引擎入口 yandex
  • 一个主机建多少个网站万江专业网站快速排名
  • 音乐模板wordpressseo关键词优化推广外包
  • 做网店好还是网站开网站需要投资多少钱
  • 西部数码网站助手教程北京百度seo工作室
  • python 自己做网站网站统计数据
  • 扁平化网站下载推广引流
  • 建设网站需要多少人傻瓜式自助建站系统
  • 做橡胶应该看什么网站凡客建站
  • 怎么在网上查网站空间是双线还是单线模拟搜索点击软件
  • 众筹网站建设报价谷歌商店下载官方正版
  • 成都哪家做网站公司好长春做网站推荐选吉网传媒好
  • 渭南企业网站建设怎么做好推广