gpt4 book ai didi

java - Scala:如何实现包含没有类型参数的 scala "typed"类的 java 接口(interface)

转载 作者:行者123 更新时间:2023-11-29 04:20:42 25 4
gpt4 key购买 nike

这是一个棘手的问题 - 我有一个我想在 scala 中实现的 java 接口(interface):

public interface Foo {
public void bar(scala.Array arr);
}

甚至可以在 scala 中实现吗?当我尝试时:

class FooImpl extends Foo {
override def bar(arr: Array[_]): Unit = ???
}

我得到:

Error:(13, 7) class FooImpl needs to be abstract, since method bar 
in trait Foo of type (x$1: Array)Unit is not defined
(Note that Array does not match Array[_]. To implement a raw type, use
Array[_])
class FooImpl extends Foo {

最佳答案

错误消息为您提供了除 Array 之外的任何泛型类型的答案(当然是在替换名称之后):

To implement a raw type, use Array[_]

“原始类型”是 Java 所说的没有类型参数的泛型类型,例如https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html解释了为什么你不应该使用它们,除了与现在非常过时的 Java-5 之前的代码交互。因此,如果可以的话,您应该首先修复 Java 接口(interface)。

现在,为什么这对 Array 不起作用?它是一种特殊类型,真正内置于编译器中。它的实例是真正的 JVM 数组,在 Java 中没有通用类型。所以当它在 Scala 代码中使用时,编译后的字节码根本不使用 scala.Array。我猜它只作为 JVM 类型存在(不像 scala.Anyscala.Null)将静态方法放在那里,但所有实例方法都定义为 抛出新的错误()。错误消息似乎没有考虑到这种独特的情况。

所以,答案是:不,它不能在 Scala 中实现,据我所知。但它也不能用 Java 实现。即使是微不足道的实现,您在尝试使用它编写代码时也会遇到同样的问题

关于java - Scala:如何实现包含没有类型参数的 scala "typed"类的 java 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49381139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com