gpt4 book ai didi

java - 如何在 Scala 中扩展包含泛型方法的 Java 接口(interface)?

转载 作者:搜寻专家 更新时间:2023-11-01 01:30:41 32 4
gpt4 key购买 nike

假设我们有以下 Java 接口(interface):

// Java
public interface Foo {
<T> T bar(Class<T> c);
}

我应该如何在 Scala 中扩展它?写作

// Scala
class FooString extends Foo {
override def bar(c: Class[String]): String = "hello, world";
}

将导致编译器抛出“类 FooString 需要是抽象的,因为类型 [T](Class[T])T 的特征 Foo 中的方法 bar 未定义。”

提前致谢!

更新:丑陋的事实是:我误解了 Java 中的泛型。

无论如何,Nicolas 和 Walter 的回答都显示了我的问题的解决方案,尽管我更喜欢 Walter 的回答,因为它不那么冗长。

最佳答案

它不起作用,因为您没有正确实现接口(interface)。你的方法 n scala 的签名必须是:

def bar[T](c:Class[T]):T

只有当你想实现 Foo 时,你才能修复 String 的行为。

第三次尝试,根据我们的讨论:

def bar[T](c:Class[T]):T = {
// Some stuff
val o:Any = myUntypedFunction(env)
c.cast(o)
}

根据上下文,myUntypedFunction 将创建一个对象,然后您使用类参数转换结果并获得一个 T 对象。再次声明:此行为在 java 和 scala 中是相同的。

关于java - 如何在 Scala 中扩展包含泛型方法的 Java 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1472311/

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