0

Eclipse OSGI jar (org.eclipse.osgi_3.7.2.v20120110-1415.jar) のクラスを使用し、Eclipse IDE 内で適切にコンパイルされたクラスがあり、それはコンパイラです。しかし、このクラスを Ant および JDK 1.7 コンパイラでコンパイルしようとすると、コンパイラは次のエラーを出力します。

[javac] /data/ant/sw_jdk1.7/test-Java7/com.tsystems.favbg.ui.core/src/com/
        tsystems/favbg/ui/core/job/AbstractLoader.java:24: 
        error: type CopyOnWriteIdentityMap does not take parameters
[javac]     private final CopyOnWriteIdentityMap<LoaderListener, String>
            eventListenerMap = new CopyOnWriteIdentityMap<>();

error: cannot infer type arguments for CopyOnWriteIdentityMap;
[javac]     private final CopyOnWriteIdentityMap<LoaderListener, String> 
            eventListenerMap = new CopyOnWriteIdentityMap<>();
[javac]   reason: cannot use '<>' with non-generic class CopyOnWriteIdentityMap

明らかに、javac はクラスがジェネリックを使用していると認識しません。しかし、Java Decompiler で開くと、一般的なパラメーターがよく認識されます。誰かがこの問題を知っていて、解決策を持っていますか?

4

2 に答える 2

0

JDK 1.6に基づくSCJPの認定書を読んでいて、コードを書き(コピーして貼り付け)、JDK 1.7内でコンパイルしようとすると、矛盾が見つかります。

たぶん、私はあちこちで同じ間違いを犯していますが、彼らは理解するのが難しいようです。たとえば、http://www.coderanch.com/forums/posts/list/80/467890#2679297にある私の投稿を参照してください。私は専門家ではありませんが、Java Genericsに関連するWebサイトで利用可能なチュートリアルを考えると、Angelika Langer(http://www.angelikalanger.com/Publications.html)のカリキュラムはコンサルティングに魅力的であると思います。

その件についてあなたのアドバイスは何ですか?

于 2012-07-29T11:55:27.430 に答える
0

CopyOnWriteIdentityMap問題はクラスの使い方にあると思います。私はあなたがこのクラスを使用していると仮定しています:

  org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap

javadocsを見ると、それが汎用クラスではないことがわかります。また、(パッケージの場所から)汎用ユーティリティクラスを意図したものではないという印象を受けます。

おそらく、Eclipseでコンパイルしているときに、別のバージョンのJARを使用しています...ジェネリッククラスです。いずれにせよ、Antを介して使用しているコンパイラは、ジェネリックではないと考えています。

于 2012-06-26T06:45:03.257 に答える