Cum se dezactivează mesajul „Accesul poate fi privat de pachet” în IntelliJ? (Programare, Java, Intellij Idea)

Thomas Zuberbuehler a intrebat.

Dezvoltând un API, mesajul de avertizare „Accesul poate fi pachet-pachet” în clasele Java poate fi foarte enervant.

Am petrecut deja ceva timp parcurgând setările pentru a găsi o modalitate de a dezactiva acest mesaj, dar fără nicio constatare. Aveți vreo idee despre cum se poate dezactiva mesajul?

Comentarii

  • Al meu îmi spune că o metodă poate fi pachet-privat, dar când fac acest lucru, celelalte locuri din codul meu unde este apelată nu vor funcționa (așa cum te-ai aștepta), deci de ce îmi spune că poate fi pachet-privat? Nu poate fi dacă îl folosesc în altă parte. Nu este o sugestie foarte utilă din partea IDE-ului. –  > Por Marc Fearby.
5 răspunsuri
mboss

Regula de inspecție este „Accesul la declarații poate fi mai slab” și există două opțiuni care pot fi dezactivate „Sugerați nivelul de vizibilitate pachet-privat…”

DimaSan

Mergeți la Settings → Editor → Inspections apoi Java → Declaration redundancy → Declaration access can be weaker regula.
Aici puteți fie să o dezactivați de tot, fie să selectați opțiunile de sugestie din panoul din dreapta:

seekingStillness

Pentru a dezactiva de la caz la caz, utilizați

@SuppressWarnings("WeakerAccess")

Comentarii

  • Acesta este cel mai bun răspuns. Procedând astfel, vă documentați de fapt intenția, în loc ca IDE-ul să acopere totul pentru dumneavoastră –  > Por rath.
  • Aș fi spus că declararea unei metode ca fiind publică îți documentează deja intenția. Dar am înțeles ideea. Dacă o spui de două ori, atunci vor începe să creadă că vorbești serios. –  > Por Michael Kay.
  • De fapt, este un vechi anti-pattern să faci totul privat. Utilizatorii TDD vor înțelege acest lucru mai bine decât oricine. În esență, cu excepția cazului în care scrieți cod pentru distribuție și trebuie să protejați elementele interne de utilizatori, dacă nu faceți totul privat, testarea și refactorizarea devin mai dificile. Ținând cont de acest lucru, nu este o idee atât de proastă să se extindă la nivelul întregului IDE. –  > Por Brill Pappin.
  • Chiar și așa, sunt destul de sigur că puteți configura unele dispozitive de obscuritate pentru a schimba accesul pentru dumneavoastră. –  > Por Earthcomputer.
  • @BrillPappin Aveți vreo sursă pe care să o pot citi despre ideea că a păstra totul la cel mai slab acces posibil (nu „a face totul privat”, pe care sunt sigur că nimeni nu a susținut-o vreodată) este un anti-pattern? Și face refactorizarea mai dificilă? În opinia mea, a face totul public va transforma treptat codul într-un bol de spaghete în care totul depinde de totul. –  > Por SantiBailors.
JimHawkins

Mutați cursorul la public , apăsați Alt + Enter și alegeți una dintre opțiuni:

Comentarii

  • Interesant este că nu am opțiunea „Dezactivați inspecția” atunci când selectez „Make ‘package-private'”. (Probabil că am dezactivat o altă setare astfel încât să nu văd această opțiune.) Sunt sigur că răspunsul tău funcționează. Mulțumesc. soluția lui mboss a rezolvat problema pentru mine. –  > Por Thomas Zuberbuehler.
  • A funcționat pentru mine 🙂 –  > Por mrek.
  • Acest lucru nu ar putea dezactiva toate sugestiile „Accesul la declarații poate fi mai slab”, nu doar pe cele care sugerează pachet-privat? –  > Por Joe White.
Michael Kay

O altă soluție care nu a fost menționată până acum: dacă aveți o metodă care este declarată publică, iar IDE vă spune că nu există referințe la metoda din afara pachetului, atunci poate că trebuie să adăugați un caz de testare care să apeleze metoda respectivă din afara pachetului. Cu alte cuvinte, tratați avertismentul ca pe o semnalare a absenței unui caz de testare pentru o metodă publică.

Comentarii

  • Deoarece este obișnuit ca clasa de testare să se afle în același pachet cu clasa testată, acest lucru nu va schimba cu adevărat nimic. –  > Por Stefan D..
  • @Stefan: De obicei, testele unitare se află în același pachet, dar o API publică ar trebui testată, de exemplu, în testele de integrare sau de acceptare și ar trebui să utilizeze API publică așa cum ar face un client adevărat. Din exterior, cred eu. –  > Por jazz64.