形参化类 ‘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,一经查实,立即删除!

相关文章

统计某个字段有哪些值

统计某个字段有哪些值 POST mgb_test_alias/_search {"size": 0,"aggs": {"gameid_list": {"terms": {"field": "tag.abc","size": 100000}}},"track_total_hits":true }

前端实现点击复制内容到粘贴板功能

Document.execCommand() Document.execCommand()是操作剪贴板的传统方法&#xff0c;各种浏览器都支持。 复制时&#xff0c;先选中文本&#xff0c;然后调用document.execCommand(‘copy’)&#xff0c;选中的文本就会进入剪贴板。 当需要选中的内容是文本输入标签(input、te…

算法练习第十六天| 104.二叉树的最大深度、559. N 叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

优先掌握递归的方式 104.二叉树的最大深度 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode le…

大数据开发(Spark面试真题-卷一)

大数据开发&#xff08;Spark面试真题&#xff09; 1、什么是Spark Streaming&#xff1f;简要描述其工作原理。2、什么是Spark内存管理机制&#xff1f;请解释其中的主要概念&#xff0c;并说明其作用。3、请解释一下Spark中的shuffle是什么&#xff0c;以及为什么shuffle操作…

京东获得JD商品详情 API 返回值说明

jd.item_get 获取API测试 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheStrin…

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; 文章说本论文的意义就在于揭示模型选择对于…

AI为什么需要GPU

人工智能&#xff08;AI&#xff09;需要GPU&#xff08;图形处理单元&#xff09;主要是因为深度学习模型的训练和推理过程需要大量的计算资源。GPU相比于传统的中央处理单元&#xff08;CPU&#xff09;在并行计算方面具有明显的优势&#xff0c;能够更有效地处理大规模的数据…

用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; 代表队、 代表队和 代表队分别获得本次竞赛的第一、二、三名让我们以热烈的掌声表示祝…

指针的进阶小tips

前情提要 指针是变量&#xff0c;存地址&#xff08;唯一&#xff09;指针4/8个字节&#xff08;32/64位平台&#xff09;指针有类型&#xff0c;其类型决定指针整数的步长&#xff0c;指针解引用操作的时候的权限。指针的运算 字符指针 int main() {char am;char *pc&c…

使用插件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…

【 React 】super()和super(props)有什么区别

相关文章 react 中的 super super(props) 1. ES6类 在ES6中&#xff0c;通过extends关键字实现类的继承&#xff0c;方式如下&#xff1a; class sup{constructor(name){this.namename;}printName(){console.log(this.name)} } class sub extends sup{constructor(name,age)…

基于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&…