Wie deaktiviere ich die Nachricht "Zugriff kann paketprivat sein" in IntelliJ?


79

Bei der Entwicklung einer API kann die Warnmeldung "Zugriff kann Paket-Paket sein" in Java-Klassen sehr ärgerlich sein.

Ich habe bereits einige Zeit damit verbracht, die Einstellungen durchzugehen, um einen Weg zu finden, diese Nachricht zu deaktivieren, jedoch ohne Ergebnisse. Irgendeine Idee, wie man die Nachricht deaktiviert?


6
Meine sagt mir, dass eine Methode paketprivat sein kann, aber wenn ich das tue, funktionieren die anderen Stellen in meinem Code, an denen sie aufgerufen wird, nicht (wie zu erwarten). Warum sagt sie mir also, dass es sich um ein Paket handeln kann? -Privat? Es kann nicht sein, wenn ich es woanders benutze. Kein sehr hilfreicher Vorschlag der IDE hier.
Marc Fearby

Antworten:


54

Die Inspektionsregel lautet "Deklarationszugriff kann schwächer sein" und es gibt zwei Optionen, die deaktiviert werden können: "Paket-private Sichtbarkeitsstufe vorschlagen ..."


67

Gehe Settings → Editor → Inspectionsdann zur Java → Declaration redundancy → Declaration access can be weakerRegel.
Hier können Sie es entweder überhaupt deaktivieren oder die Vorschlagsoptionen im rechten Bereich auswählen:

Geben Sie hier die Bildbeschreibung ein


62

Verwenden Sie zum Deaktivieren von Fall zu Fall

@SuppressWarnings("WeakerAccess")

6
Dies ist die beste Antwort. Auf diese Weise Sie tatsächlich Ihre Absicht dokumentieren, anstatt die IDE Decke-Abdeckung alles für Sie
rath

3
Ich hätte gesagt, eine Methode als öffentlich zu deklarieren, hat Ihre Absicht bereits dokumentiert. Aber ich verstehe. Wenn du es zweimal sagst, werden sie glauben, dass du es wirklich ernst meinst.
Michael Kay

1
Es ist eigentlich ein altes Anti-Muster, um alles privat zu machen. TDD-Benutzer werden dies besser verstehen als jeder andere. Wenn Sie keinen Code für die Verteilung schreiben und die Interna vor Ihren Benutzern schützen müssen, wird das Testen und Refactoring im Wesentlichen schwieriger, wenn Sie alles privat machen. In diesem Sinne ist Mayne keine so schlechte Idee, es IDE-weit zu machen.
Brill Pappin

Selbst dann bin ich mir ziemlich sicher, dass Sie einige Verschleierer konfigurieren können, um den Zugriff für Sie zu ändern.
Erdcomputer

@BrillPappin Haben Sie eine Quelle, die ich über die Idee lesen kann, dass es ein Anti-Muster ist, alles so schwach wie möglich zu halten (nicht "alles privat machen", was sicher niemand jemals befürwortet hat)? Und erschwert das Refactoring? Wenn Sie alles öffentlich machen, wird der Code meiner Ansicht nach allmählich zu einer Schüssel Spaghetti, in der alles von allem abhängt.
SantiBailors

8

Bewegen Sie den Cursor auf public, drücken Sie Alt+ Enterund wählen Sie eine der folgenden Optionen:
Geben Sie hier die Bildbeschreibung ein


2
Interessanterweise habe ich bei Auswahl von "Paket privat machen" nicht die Option "Inspektion deaktivieren". (Wahrscheinlich habe ich eine andere Einstellung deaktiviert, damit ich diese Option nicht sehe.) Ich bin sicher, dass Ihre Antwort funktioniert. Vielen Dank. Die Lösung von mboss hat den Trick für mich getan.
Thomas Zuberbuehler

Arbeitete für mich :-)
mrek

3
Würde dies nicht alle Vorschläge für "Deklarationszugriff kann schwächer sein" deaktivieren , nicht nur diejenigen, die paketprivat vorschlagen?
Joe White

4

Eine andere Lösung, die bisher nicht erwähnt wurde: Wenn Sie eine Methode haben, die als öffentlich deklariert ist, und die IDE Ihnen mitteilt, dass von außerhalb des Pakets keine Verweise auf die Methode vorhanden sind, müssen Sie möglicherweise einen Testfall hinzufügen, der diese Methode von außerhalb aufruft das Paket. Mit anderen Worten, behandeln Sie die Warnung als Signal für das Fehlen eines Testfalls für eine öffentliche Methode.


Da es üblich ist, dass sich die Testklasse im selben Paket befindet wie die zu testende Klasse, ändert dies nichts wirklich.
Stefan D.

1
@Stefan: Normalerweise befinden sich Unit-Tests im selben Paket, aber eine öffentliche API sollte beispielsweise in Integrations- oder Abnahmetests getestet werden und die öffentliche API wie ein echter Client verwenden. Von außen denke ich.
Jazz64
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.