64

getClass()パブリック抽象クラスがあり、抽象クラスを拡張するクラスからの情報が必要になるため、メソッドを使用しようとしています。例はこれです:

public String getName() {
    return getClass().getSimpleName();
}

ただし、IntelliJはこれを報告します:

Ambiguous method call. Both
getClass    ()    in Object and
getClass    ()    in Object match.

コードは正常に実行されますが、IDEに数十のエラー警告があるのはちょっと邪魔です。それは多くの誤検知で私のワークフローを混乱させます。

これらのエラーが表示されるのはなぜですか。また、エラーが表示されないようにするにはどうすればよいですか。

4

5 に答える 5

93

このように私のgetClass()電話をかけるObject

((Object) this).getClass()

私のために(非抽象クラスで)問題を解決します。それは素晴らしいことではありませんが、機能しています。

また、プロジェクト設定からAndroid SDKを操作し、AndroidSDKからすべてのJDKjarを削除すると、エラーが解決されます。もちろん、修正を利用するには、プロジェクト内でそれを参照する必要があります。

于 2013-04-04T15:32:17.763 に答える
43

コードは問題ありませんが、IntelliJのエラーです。

エラーレポートもう1つ

この問題のさまざまなバリエーションに関するエラーレポートがさらにいくつかあります。duffymoがコメントで指摘しているように、クラスパスにJDKのバージョンが異なることが原因である可能性もあります。

于 2012-04-30T16:26:17.027 に答える
5

別の回避策は、クラスを取得するためのヘルパーメソッドを生成することです。

public Class<?> type() {
    return super.getClass();
}

または静的な再利用可能なユーティリティ:

public static final Class<?> type(Object object) {
    return object.getClass();
}
于 2014-01-22T12:04:58.617 に答える
3

エラーが発生するかどうかは、参照しているAndroidのバージョンによって異なることに気付きました。以前は、 MavenCentralへのリンクでAndroid4.1.1.4の依存関係を定義していました。pom.xml

<dependency>
    <groupId>com.google.android</groupId>
    <artifactId>android</artifactId>
    <version>4.1.1.4</version>
    <scope>provided</scope>
</dependency>

その間、maven-android-sdk-deployerを使用して必要な依存関係を提供します。

<dependency>
    <groupId>android</groupId>
    <artifactId>android</artifactId>
    <version>4.3_r1</version>
    <scope>provided</scope>
</dependency>

次にgetClass()、エラーが発生します。

于 2013-09-19T12:08:07.133 に答える
1

Maven Android Platformこれは、Mavenを使用するAndroidプロジェクトがあり、プロジェクトSDKとしてを使用してIntelliJにインポートする場合に発生する可能性があります。問題は、Maven Android PlatformAndroidMaven依存関係jarの両方にjava.lang.Objectクラスが含まれていることです。

回避策は、プロジェクト構造->プラットフォーム設定-> SDK- > MavenAndroidプラットフォーム->クラスパスに移動します。実際にJDKにあるすべてのjarが一覧表示されます。それらをすべて削除して、Androidの2つの依存関係(resannotations.jar)だけを残します。

編集:この問題は、かなり前にIntelliJIssueTrackerにすでに報告されています。

于 2014-11-08T13:40:31.543 に答える