gpt4 book ai didi

java - scala 与 Java 不匹配和推断类型参数

转载 作者:行者123 更新时间:2023-11-29 08:43:35 24 4
gpt4 key购买 nike

我打算使用 getDatasID来自 Factory.javatest.scala .

//Factory.java
class Factory {
...
public <K, V, T extends Datas<K, V>> DatasID<T> getDatasID(Class <T> dataClass) ...
}

// C.java
public class C extends Datas<Key, Value> { ... }

我在 scala 中使用了两个类来运行 getDatasID

//Test.scala
abstract class A[K, V, T[K, V] <: Datas[K, V]]
abstract class B extends Datas[Key, Value]
val targetA = new Factory()
.getDatasID(
classOf[A
[Key, Value, ({type T[K, V]=Datas[Key, Value})#T]
])

val targetB = new Factory()
.getDatasID(classOf[B])

两个类都显示相同的错误。

  1. 推断类型参数 [Nothing, Nothing A[Key, Value, [K, V]Datas[Key, Value]]]不符合... [K,V,T <: Datas[K,V]]
  2. 类型不匹配

    • 找到:class[A[Key, Value, [K,V]Datas[Key, Value]]](classOf[A])
    • 必填:Class[T]

我想匹配类[Key, Value, Datas[Key, Value]]。最好的情况是

val targetB = new Factory()
.getDatasID(classOf[B])

以上代码有效。

最佳答案

在这种情况下,Scala 无法推断出 KV,您需要明确提供它们:

new Factory.getDatasId[Key, Value, B](classOf[B])

new Factory.getDatasId[Key, Value, A[Key, Value, _ <: Datas[Key, Value]](classOf[A])

(取决于您需要通过的类(class))。如果可能,最好更改您的 Java 签名,因为它实际上并不使用 KV:

public <T extends Datas<?, ?>> DatasID<T> getDatasID(Class <T> dataClass)

关于java - scala 与 Java 不匹配和推断类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156251/

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