SWIG를 사용하여 C++ 클래스를 Java로 내보내지만 프록시 객체가 인터페이스를 구현하도록하는 데 문제가 있음 .SWIG/Java 강제로 프록시 클래스에서 인터페이스를 구현하는 방법을 알아낼 수 없습니다.
SWIG 설명서를 훑어보고 "% pragma (java) jniclassinterfaces = x"를 사용하여 JNI 클래스가 주어진 인터페이스를 구현하도록하고 "% pragma (java) moduleinterfaces = x"를 사용하여 모듈을 가질 수 있음을 발견했습니다. 지정된 인터페이스는 구현하지만 실제 프록시 객체에는 해당하는 프라그 마가 없습니다.
SWIG가 '구현 X'코드를 생성하는 것을 선호합니다. 나중에이 구현을 추가하려고 시도하는 것이 어렵다는 것을 증명합니다.
이interface IVector<VectorType> {
VectorType add(VectorType other);
...
}
그래서 이런 일이 실패 :
class MyVector extends MyProxyVector implements IVector<MyVector> {
MyVector add(MyVector other) {
return (MyVector) super.add(other);
}
}
때문에 나는 꿀꺽 꿀꺽 프록시를 서브 클래스 다음 인터페이스를 구현하려고하면 나는 또한 제네릭을 사용하고 있기 때문에 예를 들어, 내가 문제로 실행 부모 클래스를 자식 클래스에 캐스팅해야합니다.
이 문제를 해결할 수있는 다른 방법은 래퍼 클래스를 만들거나 복사본 생성자를 사용하는 것입니다. 두 가지 모두 하나의 인터페이스를 구현하려는 전체 목적에 비해 다소 비효율적 인 것처럼 보입니다.