Java 中的泛型,使用通配符

2023-12-12

我有一个关于 Java 泛型的问题,即使用通配符。我有一个像这样的 GenClass 示例类:

public class GenClass<E> {

    private E var;

    public void setVar(E x) {
        var = x;
    }

    public E getVar() {
        return var;
    }
}

我还有另一个简单的课程:

public class ExampleClass {

}

我编写了以下测试类:

public class TestGenClass {

    public static void main(String[] str) {

        ExampleClass ec = new ExampleClass();

        GenClass<ExampleClass> c = new GenClass<ExampleClass>();

        c.setVar(ec);
        System.out.println(c.getVar());  // OUTPUT: ExampleClass@addbf1
    }

}

现在,如果我使用通配符并在测试类中写入:

GenClass<?> c = new GenClass<ExampleClass>();

位于:

GenClass<ExampleClass> c = new GenClass<ExampleClass>();

编译器对这个新语句没有任何问题,但是,它抱怨

c.setVar(ec);

它说“方法 (setVar()) 不适用于参数 (ExampleClass)”。为什么我会收到此消息?

我认为我使用通配符的方式使引用变量 c 成为 GenClass 类型,它将接受任何类作为参数 - 在 E 的位置我将有任何类。这只是变量的声明。然后我用它初始化它

new GenClass<ExampleClass>()

这意味着我创建了一个 GenClass 类型的对象,它具有一个 ExampleClass 类型的类作为参数。所以,我认为现在 GenClass 中的 E 将是 ExampleClass,并且我将能够使用 setVar() 方法,将其作为参数提供给 ExampleClass 类型。 这是我的假设和理解,但似乎Java不喜欢它,我错了。 任何评论都表示赞赏,谢谢。


这种具体情况已在Java 泛型教程.

请注意,[使用通配符],我们仍然可以从[通用Collection] 并给他们输入类型Object。这始终是安全的,因为无论集合的实际类型是什么,它都包含对象。但是向其中添加任意对象并不安全:

Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error

因为我们不知道元素类型是什么c代表,我们不能向其中添加对象。这add()方法接受类型参数E,集合的元素类型。当实际类型参数为?,它代表某种未知类型。我们传递给的任何参数add必须是这种未知类型的子类型。由于我们不知道那是什么类型,因此我们无法传递任何内容。唯一的例外是null,它是每种类型的成员。

(强调我的)

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

Java 中的泛型,使用通配符 的相关文章

  • 如何在 IDEA Intellij 上使用 Spring-boot 自动重新加载

    我写了一个基于Spring boot tomcat freemarker的项目 我运行成功 但是每当我修改一些模板和java类时 我必须重新启动服务器或使用Intellij上的 重新加载更改的类 菜单才能使更改生效 浪费很多时间 然后我尝试
  • 将构造函数作为参数传递给方法

    我是java新手 开始研究构造函数 我看到一些构造函数作为参数传递给方法的示例 请告诉我当构造函数作为参数传递给方法时会发生什么 或者建议我一些链接 我可以在其中获得有关使用构造函数的足够知识 根据您需要传递构造函数的目的 您可以考虑传递供
  • 使类只能从特定类实例化

    假设我有 3 节课class1 class2 and class3 我怎样才能拥有它class1只能通过实例化class2 class1 object new class1 但不是 class3 或任何其他类 我认为它应该与修饰符一起使用
  • Spring中的ProxyFactoryBean

    有人可以解释一下吗代理工厂Bean http static springsource org spring docs current javadoc api org springframework aop framework ProxyFa
  • 使用 Spring 控制器处理错误 404

    I use ExceptionHandler处理我的网络应用程序抛出的异常 在我的例子中我的应用程序返回JSON回应HTTP status用于对客户端的错误响应 但是 我正在尝试弄清楚如何处理error 404返回与处理的类似的 JSON
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 如何将 Java 地图转换为在 Scala 中使用?

    我正在开发一个 Scala 程序 该程序调用 Java 库中的函数 处理结果并生成 CSV 有问题的 Java 函数如下所示 Map
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • 具有 JPA 持久性的 Spring 状态机 - 存储库使用

    我试图弄清楚如何轻松使用 Spring 状态机 包括使用 JPA 进行持久化 这是我正在处理的问题 不兼容的数据类型 工厂和持久性 在程序的某个时刻 我想使用连接到用户的状态机 有用于此目的的存储库 项目spring statemachin
  • 在带有 Protocol Buffers 的项目中使用 Proguard 有什么特点?

    我有一个使用 Google Protocol Buffers 的项目 一旦我尝试用 ProGuard 对其进行混淆 似乎 protobuf 会导致问题 我将所有自己的类打包成mybuildedclasses jar 谷歌代码被打包成prot
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • JUNIT 测试 void 方法

    我有一个充满 void 方法的 java 类 我想进行一些单元测试以获得最大的代码覆盖率 例如我有这个方法 protected static void checkifValidElements int arg1 int arg2 metho
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • 如何在 O(n) 时间内根据 Map 中的整数值相对于其他值随机选择一个键?

    如果我们有一个Map
  • 如何从 JavaFX 中的另一个控制器类访问 UI 元素?

    我有一个使用 NetBeans 8 编写的 JavaFX Java 8 应用程序 没有SceneBuilder 我的应用程序有一个主窗口 该窗口有自己的 FXML 文件 primary fxml 和自己的控制器类 FXMLPrimaryCo
  • spring data jpa复合键重复键记录插入导致更新

    我有一个具有复合键的实体 我试图通过使用 spring data jpa 存储库到 mysql 数据库来持久化它 如下所示 Embeddable public class MobileVerificationKey implements S
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr

随机推荐

  • Aurelia 动态绑定

    我创建了一个生成表格数据的自定义元素 出于充分的理由 这会生成实际的 HTML 并插入到 DOM 中 而无需使用模板 我需要将点击观察器附加到特定元素 以便我可以在自定义元素中运行函数来响应点击 如果使用模板 我会使用 click dele
  • 使用带有整数的 scanf 的分段错误[重复]

    这个问题在这里已经有答案了 当尝试使用以下函数读取用户的整数输入时 我的 C 代码中出现分段错误 int userChoice 0 tS float tR tW tP aP char title 35 title2 35 Book curr
  • 在 Laravel 中反序列化数据

    我将购物车数据保存到orders表与serialize方法 现在在我的订单 查看 页面中 我想将它们显示给用户以显示他们的订单历史记录 如何将以前序列化的数据恢复为 PHP 中可用的对象 数组 我保存数据的代码片段 order gt car
  • 设置 php-fpm 默认配置文件位置

    我已经从源代码 php php fpm nginx 构建了几次 我习惯把所有东西都藏在里面 usr local 然而 php fpm 配置文件php fpm conf总是加载自 etc 当然我可以用以下命令更改位置 y启动 php fpm
  • “连接被对等方重置”是什么意思?

    TCP 连接上的 连接被对等方重置 错误是什么意思 这是致命错误还是只是通知或与网络故障有关 这是致命的 远程服务器已向您发送了 RST 数据包 这表明连接立即断开 而不是通常的握手 这绕过了正常的半封闭状态转换 我喜欢这个描述 对等方重置
  • Spring Batch:使用新线程从 Spring MVC 控制器中启动作业

    我有一个从 Spring MVC 控制器启动的 Spring Batch 作业 控制器从用户处获取上传的文件 并且作业应该处理该文件 RequestMapping value upload public ModelAndView uploa
  • 声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放

    当我运行 JAR 时 声音不播放 但当我在 Eclipse 中运行它时 声音会播放 这是我加载剪辑的位置 文件是从 jar 的目录加载的 而不是从 jar 内加载 public void init System out println gr
  • Firebase 崩溃无法读取

    我在阅读 FireBase 上的崩溃报告时遇到问题 我的报告如下所示 我已经关注了这些说明来表示堆栈跟踪 得到了相同的结果 我正在使用 Xcode 8 我的应用程序是用 Swift 3 制作的 已经在我的中写了 FIRApp configu
  • 如何在 flutter 中制作自定义按钮形状

    I am working on a project and i want to achieve a button 我怎样才能轻松地做出这个形状 您可以使用定制画家 看一下这个很好的例子关于如何使用这个 这是您想要实现的一个小示例 虽然我没有
  • 为 Log4j 配置 Eclipse

    我正在开发一个使用 apache jena 的应用程序 以使用 sparql 访问 dbpedia 嗯 我对 DBPedia 和 apache jena 非常陌生 我做了一些研究并开始使用一些示例代码来创建 VCARD 公共类 DpPedi
  • 如何从 SQLite 获取最近 3 小时的数据

    我正在使用当前系统时间在表中插入数据 例如System currentTimeMillis 因此 在获取数据时 我只需要获取最近 3 小时的数据 以下链接对我没有帮助 因为这个链接使用了我没有的特定日期格式 从sqlite中根据最近几个小时
  • 事件 - 文档已编辑

    编辑文档时是否有事件 如果没有 有谁知道我在哪里可以找到可用 VBA 事件的列表 以下是文档对象的事件 http msdn microsoft com en us library aa140279 office 10 aspx Events
  • 关于 Runtime.getRuntime().totalMemory() 的问题

    以下函数用于计算内存使用情况 private static long getMemoryUse putOutTheGarbage long totalMemory Runtime getRuntime totalMemory putOutT
  • 单一资源的嵌套 form_

    我有一个单一的嵌套资源 如下所示 map resources bookings member gt rate gt post do booking booking resource review end 给我这些路线 new booking
  • 什么是银行冲突? (进行Cuda/OpenCL编程)

    我一直在阅读 CUDA 和 OpenCL 的编程指南 但我无法弄清楚银行冲突是什么 他们只是深入研究如何解决问题 而不详细说明主题本身 有人能帮我理解吗 如果帮助是在 CUDA OpenCL 的背景下 或者只是计算机科学中一般的银行冲突 我
  • 在 RECYCLER VIEW 中添加页脚视图?

    我想在回收器视图的底部添加页脚布局 下面是我的适配器视图 它会膨胀页眉布局以及其他项目 感谢帮助 public class SplitMembersAdapter extends RecyclerViewAdapter
  • MySql 存储过程循环光标 - 语法错误

    语法错误在哪里 DECLARE irid INT DEFAULT 0 DECLARE tmp joinid INT DEFAULT 0 DECLARE loopjoins eof INT DEFAULT FALSE DECLARE CONT
  • Python:线程可以同时读/写同一个 TCP 套接字吗?

    我想要同一个 TCP 套接字有一个读取器线程和一个写入器线程 可以吗 在访问之前我需要锁定吗 平台是Windows 7 CPython 2 7 4 对于 Unix 内核 两个线程一个读取另一个写入文件 套接字 与两个进程执行相同操作相同 由
  • 如何使用 webview url 发送标头值?

    我开发了一个带有 webview 的 android 应用程序 我想用 url 发送标头值 如果可能的话谁帮我提供一下源代码 Map
  • Java 中的泛型,使用通配符

    我有一个关于 Java 泛型的问题 即使用通配符 我有一个像这样的 GenClass 示例类 public class GenClass