Java 9 モジュール システムを使用しています。以下は、私の問題の簡略版です。
(モジュールで)実装するように(ClassA
モジュールで)定義しました。のメソッドを実装します。このメソッドは、型のパラメーターを受け取ります(モジュール内)。以下はコードです。com.foo
InterfaceB
com.bar
ClassA
print
InterfaceB
ClassC
com.baz
// src/a/com/foo/ClassA.java
package com.foo;
import com.bar.InterfaceB;
import com.baz.ClassC;
public class ClassA implements InterfaceB {
@Override
public void print(ClassC obj) {
System.out.println(obj);
}
}
// src/b/com/bar/InterfaceB.java
package com.bar;
import com.baz.ClassC;
public interface InterfaceB {
public void print(ClassC obj);
}
// src/c/com/baz/ClassC.java
package com.baz;
public class ClassC {
@Override
public String toString() {
return "This is a ClassC object";
}
}
モジュールはcom.baz
何もエクスポートしません。そのため、とClassC
のコンパイル中にアクセスするには、フラグを使用します。InterfaceB
ClassA
--add-exports
InterfaceB
正常にコンパイルされますが、コンパイルしようとするClassA
と、次のエラーが表示されます。
src/a/com/foo/ClassA.java:6: ClassA is not abstract and does not override abstract method print(ClassC) in InterfaceB
コンパイラは何らかの形で の異なるインスタンスを使用していますClassC
か? で予期しないことが起こっているような気がし--add-exports
ます。
(補足として、私が使用している理由は--add-exports
、私の例でcom.baz
は、実際には内部 JDK パッケージであるためです。モジュール設定を変更してエクスポートすることはできません。)