Java 类中的 Scala getter 和 setter

2023-11-21

我想创建一个遵循 Scala setter/getters 约定的 Java 类。

我尝试遵循简单的课程,但它不起作用:

public class JavaA {
private int a = 0;

public int a() {
    return a;
}

public void a_$eq(int a) {
    this.a = a;
}
}

但是当我尝试从 scala 访问它时:

val x = new JavaA
x.a = 1

我收到“重新分配给 val”错误消息。我试图寻找这个,但我发现的所有问题都是从 scala 到 java 的。

正确的做法是什么?

Thanks!


你只能这样做,而且这已经足够困难了,你可能不想这样做。

你什么can't要做的就是编写一个裸 Java 类,它神奇地被解释为 Scala getter 和 setter。原因是 Scala 将其 getter 和 setter 所需的信息嵌入到类文件中(例如,是否有零个参数块或一个空参数块——JVM(或 Java)中没有保留这一区别)。

你什么cando 是使用 Java 实现 Scala 定义的接口(即 Trait):

// GetSetA.scala
trait GetSetA { def a: Int; def a_=(a: Int): Unit }

// JavaUsesGSA.java
public class JavaUsesGSA implements GetSetA {
  private int a = 0;
  public int a() { return a; }
  public void a_$eq(int a) { this.a = a; }
}

你什么can't即使如此,还是直接使用类(同样是因为Java没有为Scala添加适当的注释信息):

scala> j.a = 5
<console>:8: error: reassignment to val
       j.a = 5

但自从它does成功实现该特征,当它被输入为特征时,您可以根据需要使用它:

scala> (j: GetSetA).a = 5
(j: GetSetA).a: Int = 5

所以这是一个鱼龙混杂的情况。无论如何并不完美,但它可能足以在某些情况下提供帮助。

(当然,另一种选择是提供从 Java 类到具有引用 Java 类上的实际方法的 getter/setter 的隐式转换;即使您不能让 Java 继承自 Scala,这也可以工作。 .)

(编辑:当然,编译器没有任何关键原因must这样做;有人可能会争辩说,将 Java 定义的 getter/setter 对解释为 Scala 的 getter/setter 对(即,如果类文件没有明确说明它来自 Scala),是增强功能以​​提高 Java 互操作性的良好候选者。)

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

Java 类中的 Scala getter 和 setter 的相关文章

  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 如何在映射中将字符串转换为 Seq[String]

    我有一个Map String String 以及需要的第三方功能Map String Seq String 有没有一种简单的方法来转换它 以便我可以将地图传递给函数 original mapValues Seq 注意mapValues返回地
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • ng2-charts - 无法绑定到“数据集”,因为它不是“基本图表”的已知属性

    版本 Cordova 6 3 1 Gulp CLI 1 2 2 Ionic 框架 2 0 0 rc 0 Ionic CLI 版本 2 1 0 我在用着ng2 图表在我的 ionic2 应用程序中 导入不import ChartsModule
  • 可逆树长关系

    我正在尝试用 纯 Prolog 编写可逆关系 没有is 剪切或类似的东西 是的 这是作业 我必须承认我不知道如何做 我没有看到任何创建这样的东西的过程 我们被赋予了 不纯粹 但可逆的算术关系 加 乘 等于 减 我们必须使用它们来创建这些关系
  • 如何定义旋转函数

    如何定义一个旋转函数来生成给定列表的所有旋转 例如 旋转 1 2 3 4 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 我写了一个shift函数 可以重新排列顺序 shift Int gt Int shift x tail
  • AH01215:(8)执行格式错误:'/var/www/python/hello.py'的执行失败:/var/www/python/hello.py

    我正在尝试在 apache 服务器中将 python 作为 CGI 运行 Python 版本是 2 7 12 这是我的 apache conf 文件
  • useQuery 的奇怪问题:未读取查询参数

    我有一个传递字符串的组件 userToFetch 将其作为参数化查询中的可变参数 该组件如下所示 pages index jsx import React from react import useQuery from apollo rea
  • CSS - 行高属性,它是如何工作的(简单)

    So in 这个简单的例子我的最终结果是 这是一个非常简单的问题 但我就是无法理解它 为了实现我使用的数字的垂直居中 line height 100px 效果很好 并且一直在反复试验的基础上进行 我的问题具体是为什么line height
  • 为什么函数中不允许使用“from ... import *”? [复制]

    这个问题在这里已经有答案了 From 文档 导入的通配符形式 from module import 仅允许在模块级别 尝试在类或函数定义中使用它会引发SyntaxError 为什么 避免在函数中使用它有什么意义 有什么问题 CPython
  • WebView使用loadDataWithBaseUrl跳转到锚点

    我的 Android 应用程序使用 WebView 来显示我 即时 生成的一堆 HTML 代码 HTML 代码使用以下代码加载 StringBuilder builder new StringBuilder HTML builder app
  • jquery UI 对话框和 Asp.net UpdatePanel

    我正在寻找用于 asp net 的 JavaScript 模式对话框解决方案 jquery UI 对话框似乎不错 但它将对话框容器移动到 body 标记的底部 我更改了对话框代码以将对话框保留为 asp net 形式 但它仍然不在 upda
  • MATLAB - FFT 缺少基础[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我目前正在从事我的第四年项目 计算机科学 其中涉及音乐 gt 乐谱的自动转录 我目前正在 Matlab 中进行 但在某个阶段必须转换为 java 我的问题 我的程序返回纯正弦音的
  • 选择区域 OpenCV

    我是 OpenCV 新手 我想选择视频 图像中的特定区域进行检测 就我而言 我想检测仅在路上而不是在停车场的汽车 嗯 选择汽车需要使用训练数据 但选择 ROI 感兴趣区域 相当简单 考虑img cv2 imread image 在这种情况下
  • 如何使用“--multi-dex”选项?

    2013 11 13 18 39 09 XlApp Dx trouble writing output Too many method references 66024 max is 65536 You may try using mult
  • 当需要 Node.js 中的模块时,“点斜杠”(./) 是否是必需的?

    我正在学习 Node js 并使用 Visual Studio 2015 Node JS 扩展编写一个简单的模块 I know 意思是 在同一目录中查找文件 但在我见过的大多数系统中 比如说 include在 C 中 转发 是可选的 我尝试
  • javax.net.ssl.SSLException:收到致命警报:bad_record_mac

    我得到了一个javax net ssl SSLException Received fatal alert bad record mac用于 HTTPS 连接 并非每个请求都会发生这种情况 如果我发送相同的请求 10 次 我只会收到一两次此
  • 具有自定义浮点格式的 pprint

    我有一个带有元组键的嵌套字典结构 当我使用 pprint 漂亮地打印字典时 条目如下所示 A B C 0 14285714285714285 D 0 14285714285714285 E 0 14285714285714285 F 0 1
  • 指定的 JDK 版本为“2724.0.0.0.0”,最大值为“500.0.0.0.0”

    在安装 Netbeans IDE 最新版本时 我遇到了错误 指定的 JDK 版本为 2724 0 0 0 0 而最大值为 500 0 0 0 0 不确定是什么导致了这个问题 类路径 Java Home 都已正确设置 甚至jdk路径在Netb
  • java.io.StreamCorruptedException:无效的流标头:75720002

    我正在创建一个服务器客户端应用程序 其中服务器将 pdf 文件发送到所有连接的客户端 问题是我收到此错误 我寻找解决方案但找不到任何解决方案 这是错误 java io StreamCorruptedException invalid str
  • Eclipse 中缺少“maven package”菜单项

    我正在使用 Eclipse 3 7 和 m2eclipse 以前我知道有一个菜单条目 maven package 但由于我重新安装了 Ubuntu 所以没有条目 我必须 maven install 才能执行相同的操作 现在我想知道是否可以找
  • uniqid有多独特?

    这个问题其实并不是一个寻求解决方案的问题 而更多的是一个简单的好奇心问题 PHP uniqid 函数有一个更多的熵标志 使输出 更独特 这让我想知道 当 more entropy 为真时和不为真时 该函数多次产生相同结果的可能性有多大 换句
  • Java 类中的 Scala getter 和 setter

    我想创建一个遵循 Scala setter getters 约定的 Java 类 我尝试遵循简单的课程 但它不起作用 public class JavaA private int a 0 public int a return a publ