Java 10 'var' 和继承

2024-01-02

经过审查后var所见特征here http://openjdk.java.net/jeps/286:

我在使用 JDK 10 设置 Eclipse/IntelliJ IDEA IDE 时遇到了困难,因此向拥有 Java 10 工作环境的 Stack Overflow 用户寻求帮助。

考虑以下:

public class A {
   public void someMethod() { ... }
}
public class B extends A{
   @Override
   public void someMethod() { ... }
}
...
...
...
var myA = new A(); // Works as expected
myA = new B(); // Expected to fail in compilation due to var being
               // syntactic sugar for declaring an A type
myA = (A) (new B()); // Should work
myA.someMethod(); // The question - which someMethod implementation is called?

使用时var,我希望 JVM 能够识别该变量所保存的派生类类型。并在执行 myA.someMethod() 时执行 B:someMethod() 而不是 A:someMethod()。

情况确实如此吗?


谢谢空指针 https://stackoverflow.com/users/1746118/nullpointer提供一个link https://tio.run/#java-jdk通过在线 Java 10 编译器,我得到了以下有趣的结果:

public class Main {
    static class A {
           public void someMethod() { System.out.println(this.getClass().getName()); }
    }
    static class B extends A{
           @Override
           public void someMethod() { System.out.println("Derived: " + this.getClass().getName()); }
    }
    public static void main(String[] args) {
        var myA = new A();
        myA.someMethod();
        myA = new B(); // does not fail to compile!
        myA.someMethod();
    }
}

和输出:

Main$A // As expected
Derived: Main$B  // As expected in inheritance

结论 - var 是语法糖:var myA = new A()相当于A myA = new A(),以及与之相关的所有 OOP。

PS:我试着用一个持有匿名类的 var 玩了一下,并想出了这个有趣的行为 - 感谢(再次)空指针 https://stackoverflow.com/users/1746118/nullpointer提及它作为重复项为什么我们不能将两个推断变量作为匿名类互相分配 https://stackoverflow.com/questions/49580431/why-cant-assign-2-inferred-var-as-anonymous-class-to-each-other:

static interface Inter {
    public void method();
}

public static void main(String[] args) {
    var inter = new Inter() {
        @Override
        public void method() {System.out.println("popo");}
    };
    inter.method();
    inter = new Inter() {
        @Override
        public void method() {System.out.println("koko");}
    };
    inter.method();
}

和输出:

Main.java:11: error: incompatible types: <anonymous Inter> cannot be converted to <anonymous Inter>
        inter = new Inter() {
                ^

由于第二个匿名类类型与第一个匿名类类型不同,对 var 的第二次赋值失败 - 强制执行 的语法糖角色var关键词。

令人惊讶的是,错误消息并没有更加精确 - 目前它没有什么意义,因为错误中显示的类型名称是相同的!

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

Java 10 'var' 和继承 的相关文章

  • 在 Mac OS X 上的某个时刻,移动光标未显示在焦点上

    我有基于 Swing 的应用程序 每当我们在组件上移动鼠标时 它都会显示移动光标图标 并通过拖动来移动该组件 我已经为此使用了代码 mycomponent setCursor Cursor getPredefinedCursor Curso
  • null != Something 和 Something != null 之间的区别

    之间有区别吗null something and something null在爪哇 如果有区别 那么我应该使用哪一个 为什么 之间没有区别null something and something null 你一定在想person getN
  • 使用java进行JSON模式验证[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为返回 JSON 对象的 java webapp 编写一些验收测试 我想验证返回的 JSON 是否针对架构进行验证 任何人都可以建议
  • 谁能解释一下POJO或POCO的含义和用法[重复]

    这个问题在这里已经有答案了 可能的重复 纯旧 Java 对象 POJO 一词的确切含义是什么 https stackoverflow com questions 3326319 what does the term plain old ja
  • 尝试将 XLSX 数据导入 R 时出现 IllegalArgumentException

    在将 xlsx 文件导入 R 时 我遇到了以下错误 mydata lt read xlsx C Users aniruddha Downloads failingExample xlsx 1 Error in jcall row ir Lo
  • 按钮和窗口之间的空间

    我这里有这段代码 其想法是在主窗口中在文本区域旁边有两个按钮 但我尚未添加 在尝试使用 GridBagLayout 并在此过程中扯掉我的头发后 我决定不使用布局并在不可调整大小的窗口内手动放置按钮 import java awt impor
  • Java:无法从未命名的模块读取包?

    在将项目转移到 Gradle 时 我停止使用 org json 的自定义构建 该构建安装了 module info java 以符合模块系统 现在 我通常通过 Maven 使用它 并且由于 org json 默认情况下不是一个模块 因此它被
  • 使用 Spring boot CrudRepository 过滤数据

    我有一个简单的 REST 服务 可以使用 Spring boot 访问数据CrudRepository 该存储库已经实现了分页和排序功能 如下所示 public interface FlightRepository extends Crud
  • 在 Maven 中解决或编译循环依赖关系 [重复]

    这个问题在这里已经有答案了 我有一个有趣的问题 而不是寻找a解决方案 我正在寻找解决方案s Alice 项目有一个 pom xml 在其中 pom 说她被包装成一个罐子 虽然她是一个坚强的女人 但她依赖鲍勃 鲍勃项目是一个互补主义者 他说他
  • 删除最低位

    给定一个二进制数 删除最低位的最快方法是什么 01001001010 gt 01001001000 它将在代码中用于迭代变量的位 伪代码如下 while bits 0 index getIndexOfLowestOrderBit bits
  • @Entity 实体无法解析为类型

    学习 Spring MVC 和 Hibernate import javax persistence Column import javax persistence GeneratedValue import javax persisten
  • Spring方法获取给定类型的所有bean

    我试图从一个相同类型的豆子中获取所有豆子FileSystemXmlApplicationContext 我正在使用factory getBeansOfType SomeType class 但我注意到它只返回顶级 bean 是否有任何其他方
  • Java 接口合成方法生成,同时缩小返回类型

    我有 2 个接口和 2 个返回类型 interface interfaceA Publisher
  • 修改void函数的输入参数并随后读取它

    我有一个相当复杂的 java 函数 我想使用 jUnit 进行测试 并且我正在使用 Mockito 来实现此目的 这个函数看起来像这样 public void myFunction Object parameter doStuff conv
  • JPA 的 commit() 方法是否使实体分离?

    我现在一直在搜索JPA实体生命周期 但现在 关于实体生命周期存在一些缺失的点 我在 stackoverflow 的一篇帖子中找到了下图 请记住该图已被投票 根据此图 当我们持久化实体时 它就变成了托管实体 好的 没问题 当我们提交时 数据会
  • 为什么文件传输完成后我的列表视图条目的内容没有更新?

    为什么将文件复制到目录后listview没有更新驻留在该目录中的较新内容 仅当我退出时listview重新进入视图会刷新吗 有人可以告诉我如何解决这个问题吗 文件功能java文件的复制 您应该将新复制的文件 VideoInfo对象 添加到您
  • 对 JFace Treeviewer 多列进行排序

    我希望用户能够对TreeViewer只要他想 只要单击列标题即可 但是我不知道正确的方法 我发现我们可以使用ViewerComparator对不同的元素进行排序 但是 我不知道如何设置侦听器以便能够正确进行升序或降序排序 有没有办法让 JF
  • onActivityresult 数据为空

    这是我的相机应用程序 我想在其中捕获图像并裁剪它 但它拍照保存在我的 myimage 目录中 但不执行裁剪功能 请我需要帮助 我是这个领域的新人 这是我的相机开源代码 Intent intent new Intent MediaStore
  • 为什么浮点数有符号零?

    为什么双打有 0也 0 其背景和意义是什么 0 通常 被视为0 当一个negative浮点数非常接近零 可以考虑0 要明确的是 我指的是算术下溢 http en wikipedia org wiki Arithmetic underflow
  • Postgresql JDBC 驱动程序中的批量更新在自动提交中回滚

    我正在使用 postgres 9 3 1100 jdbc41 JDBC4 驱动程序进行批量插入 根据 JDBC 规范 其可达 到应用程序以禁用自动提交并提交或 回滚事务 就我而言 我没有使用任何事务 即自动提交为真 但如果批次中的其中一个插

随机推荐

  • 使用 Docker、Selenium 和 Pytest 运行并行测试

    我正在尝试将这些所有东西结合起来在无头 Chrome 中运行并行测试 Docker 硒 Pytest 但是 我想知道运行系统的并行部分在哪里有意义 Docker 可以做到这一点 使用 selenium grid 这两个都可以用来运行并行 和
  • Android AsyncTask 和对象传递

    我需要一些有关登录过程的代码基本架构的帮助 我正在实施异步 Http 处理以使 ICS 正常工作 这段代码的目标是登录我的应用程序 从 UI 提交登录表单 Login java 连接到我们的服务器并通过 http 传递用户名 密码获取 XM
  • libopenssl-ruby 的作用是什么?

    在 Ubuntu 中使用 Ruby 时 我需要安装 libopenssl ruby 包 我想知道这个包的用途是什么 它是红宝石吗 它不是宝石 而是延伸 扩展可以打包为 gem 但这个不是 扩展是一个 C 库 可能与一些本机 ruby 代码混
  • Angular.js:输入日期显示日期-1天

    我有一个表格
  • R-Project:xlsx 包安装失败(由于 java 问题)

    我试图安装 xlsx 包 不幸的是 Java 有一个问题 我无法解决 请在下面找到尝试安装 xlsx 包时产生的输出 这是输出 R version 3 1 1 2014 07 10 Sock it to Me Copyright C 201
  • Maven 使用子 POM 中的子路径解析哪些 URL?

    我在某处读到 如果 Maven 项目使用继承 那么它的子项目将自动使用子项目的 URL 添加子路径artifactId 但现在我找不到参考资料了 Maven 将从父 POM 逐字继承哪些继承的 URL 并将为子 POM 添加子路径 例如 以
  • 如何比较 3 个文件(看看它们之间有什么共同点)?

    我想比较 3 个文件 看看文件中有多少信息是相同的 文件格式是这样的 Chr11 447 A C 74 DP 22 AF1 1 CI95 1 1 DP4 0 0 9 8 MQ 15 FQ 78 GT PL GQ 1 1 107 51 0 9
  • 如何在Java中内存映射(mmap)Linux块设备(例如/dev/sdb)?

    我可以使用 Java 读取 写入 Linux 块设备java nio 以下代码有效 Path fp FileSystems getDefault getPath dev sdb FileChannel fc null try fc File
  • 嵌套复杂 JSON 中的搜索键

    我必须通过 JavaScript 或 jQuery 在嵌套 JSON 中搜索键 在我的 JSON 对象中 所有键都是唯一的 我自己尝试了一些解决方案 但它们不起作用 这是我的代码 json app Garden Flowers Red fl
  • 过滤自己的日期字段,未使用有效和/或错误的日期格式

    当对我自己的日期字段进行过滤时 我没有获得预期的记录 而在通过解析默认日期字段进行过滤时 我确实获得了记录 下面的代码应该返回最后提供的 JSON 中的最后两条记录 请注意创建于是默认解析日期字段 而开始日期是我自己的日期字段 因此 在过滤
  • 我可以仅将 Python .pyc 文件部署到 Google App Engine 吗?

    我正在开发一个在 Google App Engine 上使用 Django 的项目 有人问我是否可以将某些代码仅部署为已编译的 所以我想问题是我可以上传一个仅包含相关代码片段的 pyc 文件吗 我已经在应用程序中使用views pyc 文件
  • 哪种类型特征表明该类型是 memcpy 可分配的? (元组、对)

    我想知道我可以执行什么类型自省来检测可通过简单的原始内存复制分配的类型 例如 据我了解 内置类型 内置类型的元组和此类元组的元组都属于此类 动机是如果可能的话我想传输原始字节 T t1 not necessarely default con
  • 创建 (ES6) 承诺而不开始解决它

    使用 ES6 Promise 如何在不定义解决逻辑的情况下创建 Promise 这是一个基本示例 一些 TypeScript var promises function waitFor key string Promise
  • Visual Studio 2013 中的“新建项目”对话框中缺少项目模板

    当我点击文件 gt 新建 gt 项目在 Visual Studio 2013 中 不存在任何项目模板 但是 在解决方案文件中 显然是在 Visual Studio 的另一个版本中创建的 当我尝试时 添加 gt 新项目 所有模板都在那里 我想
  • Swift 中的强引用和弱引用

    在 Objective C 中 您可以将属性定义为具有强引用或弱引用 如下所示 property strong property weak 这是如何快速完成的 直接从斯威夫特语言指南 https developer apple com li
  • MainActivity 关闭后停止服务(已编辑)

    我认为我根本不清楚 我确实希望该服务能够持续存在 即使主要活动通过用户操作被破坏或Android系统这样做 它做得很好 但是当应用程序在某个时刻重新打开时 我会想要检查如果背景活动存在并使用操作按钮停止它 请提前谢谢 我启动了后台服务 在我
  • 我需要做什么才能让 Hash.from_xml() 工作?

    我在代码中安装了 ActiveSupport 并需要 active support 但是当我尝试使用Hash from xml method 我缺少什么 gem list returns LOCAL GEMS activesupport 3
  • 如何从另一个变量名创建变量? [复制]

    这个问题在这里已经有答案了 好的 在 php 中我该怎么做 给定以下场景 array of letters var letters array a b c loop through array and create empty arrays
  • 在最接近的日期合并数据框

    我有一些实验的一些数据 按主题 ID 和日期索引 我想将数据连接在一起 但受试者可能在不同的日子进行实验 这是我的意思的一个例子 下图是两个不同实验的结果 SubjectID Date ScoreA 1 2016 09 20 10 1 20
  • Java 10 'var' 和继承

    经过审查后var所见特征here http openjdk java net jeps 286 我在使用 JDK 10 设置 Eclipse IntelliJ IDEA IDE 时遇到了困难 因此向拥有 Java 10 工作环境的 Stac