形参化类 ‘Result‘ 的原始使用

  1. 在编程中,特别是在面向对象编程(OOP)中,当我们说“形参化类”或“参数化类”,我们实际上是指泛型(Generics)的概念。泛型允许在定义类、接口和方法时使用类型参数。这样,你可以创建可重用的组件,这些组件可以支持多种数据类型而无需为每种类型单独编写代码。
  2. 假设你有一个名为 Result 的类,它可能用于表示某种操作的结果。这个类可能有一个值和一个状态或错误消息。如果你想要这个类能够处理多种数据类型的结果,你可以使用泛型来定义它。
  3. 下面是一个简单的 Result 类的泛型版本示例:
public class Result<T> {  private T value;  private String errorMessage;  private boolean isSuccess;  public Result(T value, boolean isSuccess) {  this.value = value;  this.isSuccess = isSuccess;  this.errorMessage = isSuccess ? null : "Operation failed";  }  public T getValue() {  return value;  }  public String getErrorMessage() {  return errorMessage;  }  public boolean isSuccess() {  return isSuccess;  }  
}

在这个例子中,Result 类使用了一个类型参数 T,它表示 value 字段可以持有的任何类型。你可以这样使用这个类:

// 创建一个包含 String 类型结果的 Result 对象  
Result<String> stringResult = new Result<>("Hello, World!", true);  
System.out.println(stringResult.getValue()); // 输出 "Hello, World!"  // 创建一个包含 Integer 类型结果的 Result 对象  
Result<Integer> integerResult = new Result<>(42, true);  
System.out.println(integerResult.getValue()); // 输出 42

形参化类(或泛型类)的原始使用是指在没有指定类型参数的情况下使用泛型类。在 Java 中,如果你使用了一个泛型类但没有提供类型参数,编译器会将其视为原始类型。例如:

Result rawResult = new Result(new Object(), true); // 原始类型使用

在这个例子中,Result 被用作了原始类型,因为没有提供类型参数。这通常是不推荐的,因为它失去了泛型提供的类型安全性。编译器会发出一个未经检查的转换警告,因为原始类型 Result 可以接受任何类型的对象作为值,这可能导致运行时错误。

为了避免这种情况,最好总是使用具体的类型参数来实例化泛型类,以充分利用类型安全和代码重用的好处。

在使用形参化类 Result 之前,需要先定义该类。下面是一个示例:

public class Result<T> {private T value;public Result(T value) {this.value = value;}public T getValue() {return value;}public void setValue(T value) {this.value = value;}
}

在这个示例中,Result 是一个形参化类,使用了类型参数 T。这个类有一个私有字段 value,表示结果的值。类中还包含了一个构造函数和相应的 getter 和 setter 方法。

下面是如何使用 Result 类的示例:

public class Main {public static void main(String[] args) {Result<Integer> result1 = new Result<>(10);System.out.println(result1.getValue()); // 输出: 10Result<String> result2 = new Result<>("Hello");System.out.println(result2.getValue()); // 输出: HelloResult<Boolean> result3 = new Result<>(true);System.out.println(result3.getValue()); // 输出: true}
}

在这个示例中,首先创建了一个 Result 对象 result1,其类型参数 T 被设置为 Integer,并且值被设置为 10。然后使用 getValue() 方法获取结果的值并输出。

类似地,还创建了两个 Result 对象 result2result3,分别设置了类型参数 TStringBoolean,并且分别输出了结果的值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

99.qt qml-单例程序实现

在之前讲过: 58.qt quick-qml系统托盘实现https://nuoqian.blog.csdn.net/article/details/121855993 由于,该示例只是简单讲解了系统托盘实现,并没有实现单例程序,所以多次打开后就会出现多个exe出现的可能,本章出一章QML单例程序实现, 多次打开始终只显示出第一个打开…

DiT:Scalable Diffusion Models with Transformers

TOC 1 前言2 方法和代码 1 前言 该论文发表之前&#xff0c;市面上几乎都是用卷积网络作为实际意义上的&#xff08;de-facto&#xff09;backbone。于是一个想法就来了&#xff1a;为啥不用transformer作为backbone呢&#xff1f; 文章说本论文的意义就在于揭示模型选择对于…

用python写一个自动进程守护,带UI

功能是指定程序关闭后自动重启&#xff0c;并点击1作为启动 原来的想法是群成员说的某软件打包后&#xff0c;软件进程被杀后&#xff0c;界面白屏。所以写了个计算器重启demo进行进程守护 import subprocess import time import pyautogui import psutil #用计算器做演示。 d…

WiFi模块助力敏捷办公:现代办公室的关键角色

随着信息技术的飞速发展&#xff0c;现代办公室正经历着一场数字化和智能化的变革。在这一变革过程中&#xff0c;WiFi模块作为无线通信技术的核心组成部分&#xff0c;扮演着关键的角色&#xff0c;为敏捷办公提供了强大的支持。本文将深入探讨WiFi模块在现代办公室中的关键角…

Spring Boot工作原理

Spring Boot Spring Boot 基于 Spring 开发&#xff0c;Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说&#xff0c;它并不是用来替代 Spring 的解决方案&#xff0c;而是和 Spr…

安康杯安全知识竞赛上的讲话稿

各位领导、同志们&#xff1a; 经过近半个月时间的准备&#xff0c;南五十家子镇平泉首届安康杯安全生产知识竞赛初赛在今天圆满落下帏幕&#xff0c;经过紧张激烈的角逐&#xff0c; 代表队、 代表队和 代表队分别获得本次竞赛的第一、二、三名让我们以热烈的掌声表示祝…

使用插件vue-seamless-scroll 完成内容持续动态

1、安装插件 npm install vue-seamless-scroll --save 2、项目中引入 //单独引入import vueSeamlessScroll from vue-seamless-scrollexport default {components: { vueSeamlessScroll},}//或者在main.js引入import scroll from vue-seamless-scrollVue.use(scroll)3、页面使…

SRS服务器ffmpeg 推流rtmp超时中断

ffmpeg错误显示 failed to update header with correct duration failed to update header with correct filesize. Error writing trailer of rtmp://----- broken pipe SRS日志错误显示 serve error code2056 kickoffforidle : service cycle : rtmp stream service: timeou…

基于Pytorch搭建分布式训练环境

Pytorch系列 文章目录 Pytorch系列前言一、DDP是什么二、DPP原理terms、nodes 和 ranks等相关术语解读DDP 的局限性为什么要选择 DDP 而不是 DP代码演示1. 在一个单 GPU 的 Node 上进行训练&#xff08;baseline&#xff09;2. 在一个多 GPU 的 Node 上进行训练临门一脚&#x…

【深度学习笔记】稠密连接网络(DenseNet)

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.12 稠密连接网络&#xff08;DenseNet&#xff09; ResNet中的跨层连接设计引申出了数个后续工作。本节我们介绍其中的一个&#xf…

5个实用的PyCharm插件

大家好&#xff0c;本文向大家推荐五个顶级插件&#xff0c;帮助开发人员提升PyCharm工作流程&#xff0c;将生产力飞升到新高度。 1.CodiumAI 安装链接&#xff1a;https://plugins.jetbrains.com/plugin/21206-codiumate--code-test-and-review-with-confidence--by-codium…

Windows上基于名称快速定位文件和文件夹的免费工具Everything

在Windows上搜索文件时&#xff0c;使用windows上内置搜索会很慢&#xff0c;这里推荐使用Everything工具进行搜索。 "Everything"是Windows上一款搜索引擎&#xff0c;它能够基于文件名快速定位文件和文件夹位置。不像Windows内置搜索&#xff0c;"Everything&…

容器:Docker部署

docker 是容器&#xff0c;可以将项目的环境&#xff08;比如 java、nginx&#xff09;和项目的代码一起打包成镜像&#xff0c;所有同学都能下载镜像&#xff0c;更容易分发和移植。 再启动项目时&#xff0c;不需要敲一大堆命令&#xff0c;而是直接下载镜像、启动镜像就可以…

echarts x轴名称过长tip显示全称

xAxis的axisLabel的内容如下&#xff1a; axisLabel: { rotate: -45, color: document.body.className.indexOf(custom-f4c46d) > -1 ? #fff : #343434, // 显示省略号操作&#xff08;第一步&#xff09; formatter: function (value) { var val if (value.length >…

NTP协议介绍

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 网络时间协议NTP&#xff08;Network Time Protocol&#xff09;是TCP/IP协议族里面的一个应用层协议&#xff0c;用来使客户端和服务器之间进行时…

C while 循环

只要给定的条件为真&#xff0c;C 语言中的 while 循环语句会重复执行一个目标语句。 语法 C 语言中 while 循环的语法&#xff1a; while(condition) {statement(s); }在这里&#xff0c;statement(s) 可以是一个单独的语句&#xff0c;也可以是几个语句组成的代码块。 co…

IOS开发0基础入门UIkit-1cocoapod安装、更新和使用 , 安装中出现的错误及解决方案 M1或者M2安装cocoapods

cocoapod是ios开发时常用的包管理工具 1.M1或者是M2系统安装cocoapods先操作一下两个设置 1、打开访达->应用->实用工具->终端->右键点击终端->显示简介->勾选使用 Rosetta 打开&#xff0c;关闭终端&#xff0c;重新打开。 2、打开访达->应用->Xcod…

ApiPost设置预执行脚本获取token,并设置给请求头

ApiPost设置预执行脚本获取token&#xff0c;并设置给请求头 预执行脚本 这个地方获取字段为 {"msg": "操作成功","code": 200,"token": "eyJhbGciOixMiJ9.123-NQQPPKGr4Yxa1_H_JIrUXJQ" }修改head 里面参数

OpenAI劲敌吹新风! Claude 3正式发布,Claude3使用指南

Claude 3是什么&#xff1f; 是Anthropic 实验室近期推出的 Claude 3 大规模语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;系列&#xff0c;代表了人工智能技术的一个显著飞跃。 该系列包括三个不同定位的子模型&#xff1a;Claude 3 Haiku、Claude 3…

BUUCTF-Misc3

LSB1 1.打开附件 得到一张图片&#xff0c;像是某个大学的校徽 2.Stegsolve工具 根据标题LSB&#xff0c;可能是LSB隐写 放到Stegsolve中&#xff0c;点Analyse在点Data Extract 数据提取 因为是LSB隐写&#xff0c;发现含以.png结尾的图片 3.保存图片 4.得到flag 扫描二维…