I가 자바 코드에서 사용되는 용어의 정의는 다음 : (콘크리트 포트 클래스에서 입력)스칼라 코드에서 자바에 정의 된 재귀 일반적인 유형을 사용
추상 포트 정의 :
package test;
public class Port<
PortOptions extends Port.Options,
ConcretePort extends Port<PortOptions, ConcretePort>> {
public interface Options {
}
}
포트 서비스 정의 (일부 콜백 메커니즘을 통해 포트로 일부 작업을 수행 할 수 있음)
package test;
import java.util.Set;
public class PortService {
public interface Callback<T> {
void processData(T data);
}
public void methodWithCallback(Callback<Set<Port>> callback) {
}
}
그리고 콜백을 scala의 포트 서비스에 등록하려고합니다. 내가 뭘하려고하는 것은 이것이다 :
package test
import test.PortService.Callback
import java.util
class PortServiceCaller {
def callingMethod() {
val portService: PortService = new PortService
portService.methodWithCallback(new Callback[java.util.Set[Port[_, _]]] {
def processData(data: util.Set[Port[_, _]]) {
}
})
}
}
을하며 함께 비참하게 실패
error: type mismatch;
found : java.lang.Object with test.PortService.Callback[java.util.Set[test.Port[_, _]]]
required: test.PortService.Callback[java.util.Set[test.Port[_ <: test.Port.Options, _ <: test.Port[?0,?1]]]]
portService.methodWithCallback(new Callback[java.util.Set[Port[_, _]]] {
질문입니다 : 어떻게 내가 제대로 자바 서비스를 호출 할 수 있도록하기 위해 스칼라 코드를 작성하는 방법?
나는 스칼라 타이핑 시스템을 살펴 봤는데 알아낼 수 없다.
나중에 편집 :
과 같이 콜백 메소드를 선언 :
public void methodWithCallback(Callback<Set<Port<?, ?>>> callback) {
}
와 같은 스칼라에서 호출 :
portService.methodWithCallback(new Callback[java.util.Set[Port[_, _]]] {
def processData(data: java.util.Set[Port[_, _]]) {
}
})
이 솔루션은 충분히 실제로 간단하다
또한 의미가 있습니다. 두 언어 모두의 타입 시스템.
아 .. 저는 항상 ParametrizedType >이 ParametrizedType과 다른 것을 잊어 버립니다. 고마워. 나는 이것으로 그것을 해결할 수 있었다. –