Java泛型方法声明基础

2023-11-29

我开始学习Genericsfor Java我读了几个教程,但我有点困惑,不确定如何声明泛型方法。

当我使用泛型类型时,定义方法的正确顺序是什么?我找到了这个示例,什么时候需要使用尖括号,什么时候不需要?

public class Box<A> {

    private A a;
    ...

    public void setA(A a) {
        this.a = a;
    }

    public <A> List<A> transform(List<A> in) {
        return null;
    }

    public static <A> A getFirstElement(List<A> list) {
        return null;
    }

    public A getA() {
        return a;
    }

问题是您的代码使用相同的字符 A,但它有several不同地方有不同的“含义”:

public class Box<T> { 

需要大括号,因为您在这里说:Box 使用通用类型,称为 T。

UsagesT 不带大括号:

private T a;
public void setA(T a) {

But then

public <T2> List<T2> transform(List<T2> in) {

正在介绍another类型参数。我将其命名为 T2 是为了明确它是not与 T 相同。这个想法是scopeT2 的值为only那一种方法transform。其他方法不知道T2怎么样!

public static <A> A getFirstElement(List<A> list) {

与上面相同 - 这里是“T3”;-)

编辑你的评论:你不能有static方法使用类范围类型 T。这根本不可能!看here为什么会这样!

编辑2:泛型允许你编写这样的代码generic(因为它可以处理不同的类);但还是给了你编译时安全。例子:

 Box<String> stringBox = new Box<>();
 Box<Integer> integerBox = new Box<>();
 integerBox.add("string"); // gives a COMPILER error!

在人们拥有泛型之前,他们只能处理Object到处都是;和手工铸造。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java泛型方法声明基础 的相关文章

随机推荐

  • 如何从接口访问嵌套的可选索引

    鉴于以下接口描述这个TS游乐场 export type GetTestimonialsSectionQuery typename Query testimonialsSection typename TestimonialsSection
  • 无法实例化类...;没有空构造函数

    当我运行我的PaintView java 我在 logcat 中收到以下错误 即无法实例化类com example connectthedots PaintView 没有空的构造函数 07 22 18 47 43 453 D dalvikv
  • 无法关闭 Tomcat web 应用程序中的 Neo4j Jetty 服务器

    目前我正在开发一个使用 Neo4j 的网络应用程序 我们的应用需要部署在Tomcat环境中 客户要求 我们决定嵌入 Neo4j 因为这样我们就可以使用 Neo4j 提供的 Java API 更容易部署 并且性能得到提高 但是 我们还需要访问
  • Android:闹钟每 30 分钟播放一次,从 12:30 开始

    这里我将使用闹钟服务每 30 分钟播放一次闹钟 现在我已将其设置为从 Every start 开始每 10 秒播放一次 这是代码 Override public void onCreate Bundle savedInstanceState
  • 将非常大的 JSON 文件转换为 CSV

    我有一个大小约为 8GB 的 JSON 文件 当我尝试使用此脚本转换文件时 import csv import json infile open filename json r outfile open data csv w writer
  • 如何在 php 中创建安全的 mysql 准备语句?

    我是在 mysql 和 php 中使用准备好的语句的新手 我需要一些帮助来创建准备好的语句来检索列 我需要从不同的列获取信息 目前对于测试文件 我使用完全不安全SQL语句 qry SELECT FROM mytable where user
  • 有什么方法可以使用给定的索引节点号搜索文件或文件名吗?

    我正在从用户那里获取索引节点号 并且必须在文件系统中搜索该文件 如何搜索 inode 编号 我必须使用 C 和 unix 来完成此操作 到目前为止 这是我的代码 include
  • 链接命名范围未按预期工作

    我有两个简单的命名范围定义如下 class Numbers lt ActiveRecord Base named scope even conditions gt title gt 2 4 6 named scope odd conditi
  • 通过 grep 两次管道尾部输出

    使用典型的 Apache 访问日志 您可以运行 tail f access log grep 127 0 0 1 它只会显示指定 IP 地址的日志 创建时 但是为什么当你通过管道传输时会失败grep第二次 进一步限制结果 例如 css 的简
  • 移动平均查询 MS Access

    我正在尝试计算数据的移动平均值 我用谷歌搜索并在这个网站和其他网站上找到了很多例子 但我仍然感到困惑 我需要计算为特定产品选择的记录的前 5 个流量的平均值 我的表如下所示 TMDT Prod Flow 8 21 2017 12 01 00
  • 使用图像模块(python)将希伯来语文本绘制为图像

    这是我已经问过的一个问题 并且有几个得到了答案 但问题仍然存在 当我尝试使用图像模块用希伯来语写入图像时 我得到的不是希伯来语字母而是其他 ascii 字母 如果我转换为 unicode 或 ascii 我会收到一个它不支持的错误 我在这里
  • Windows TCP 套接字默认启用 SO_KEEPALIVE 吗?

    我在 TCP 套接字方面遇到了一个奇怪的错误 看起来SO KEEPALIVE默认情况下在所有套接字上启用 我编写了一个简短的测试用例来创建套接字并连接到服务器 连接后 我立即检查SO KEEPALIVE with getsockopt 该值
  • 转换元组类型

    所以我是提升 MPL 的新手 我不知道如何将它与标准类型一起使用 我想要一个隐藏这种类型的元函数 std tuple
  • FLOT 趋势线

    包括我jquery flot trendline js 从这里 这是我的代码 plot placeholder seriesdata series trendline show true lineWidth 2 fill true fill
  • 为什么 numpy.random.choice 不使用算术编码?

    如果我评估类似 numpy random choice 2 size 100000 p 0 01 0 99 使用一个均匀分布的随机数float say r 并决定是否r lt 0 01可能会浪费许多生成的随机位 熵 我听说 二手 生成伪随机
  • Fuseki SPARQL INSERT 生成“错误 400:SPARQL 查询:无 'query=' 参数”

    我尝试将一个人插入到我的本体中 但出现错误 Error 400 SPARQL Query No query parameter Fuseki version 2 4 1 Build date 2016 11 04T18 59 20 0000
  • 如何获取要粘贴到 html 文本编辑器中的文本?

    我的主页 文本区域 中有一个小型文本编辑器 我可以在其中粘贴文本 在粘贴之前如何将该文本放入变量中 我知道有这个功能 clipboardData getData 但它在 Firefox 中不起作用 我想要适用于所有浏览器的东西 我正在使用
  • 如何将 Sass 函数转换为 Less 函数?

    有谁知道如何在 Less 中重新创建以下 Sass 函数 我希望能够轻松转换任何 CSS 属性内的单位 例如 字体大小 边距 填充等 Sass function get vw target vw context 1440 0 01 1px
  • MYSQL中DBCC INPUTBUFFER(@@SPID)(为当前连接或指定连接提供sql语句)的等效语句是什么?

    是什么MySQL 等效项声明DBCC INPUTBUFFER SPID 其中列出了当前连接或指定连接的sql语句 Use 显示资料查看发送到 MySQL 的最新语句的列表 SHOW PROFILES 如果您想要 需要查看当前正在运行的查询
  • Java泛型方法声明基础

    我开始学习Genericsfor Java我读了几个教程 但我有点困惑 不确定如何声明泛型方法 当我使用泛型类型时 定义方法的正确顺序是什么 我找到了这个示例 什么时候需要使用尖括号 什么时候不需要 public class Box a p