我想在getDatasID
中使用Factory.java
中的test.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])
两个班都表现出同样的错误。
[Nothing, Nothing A[Key, Value, [K, V]Datas[Key, Value]]]
不符合...... [K,V,T <: Datas[K,V]]
类型不匹配
class[A[Key, Value, [K,V]Datas[Key, Value]]](classOf[A])
Class[T]
我想匹配类[键,值,数据[键,值]]。最好的情况是
val targetB = new Factory()
.getDatasID(classOf[B])
以上代码有效。
答案 0 :(得分:4)
在这种情况下,Scala无法推断K
和V
,您需要明确提供它们:
new Factory.getDatasId[Key, Value, B](classOf[B])
或
new Factory.getDatasId[Key, Value, A[Key, Value, _ <: Datas[Key, Value]](classOf[A])
(取决于您需要通过的课程)。如果可能,最好更改您的Java签名,因为它实际上并没有使用K
和V
:
public <T extends Datas<?, ?>> DatasID<T> getDatasID(Class <T> dataClass)