Java/01intro10 min

Styl i konwencje (Google/Sun style)

Java ma długą tradycję konwencji — od klasycznego Sun Code Conventions po nowoczesny Google Java Style Guide. ProfessNet przyjmuje Google Java Style i egzekwuje go automatycznie, żeby kod wyglądał tak samo niezależnie od autora.

Nazewnictwo

ElementKonwencjaPrzykład
Klasa, interfejsPascalCaseProbeService, Scannable
Metoda, zmiennacamelCaserunScan, forestName
StałaUPPER_SNAKE_CASEMAX_RETRIES
Pakietmałe literycom.professnet.zeus.inventory
Parametr typujedna literaT, K, V
package com.professnet.zeus.inventory;

public final class ProbeService {

    private static final int MAX_RETRIES = 3;

    private final ProbeRepository repository;

    public ProbeService(ProbeRepository repository) {
        this.repository = repository;
    }

    public ScanResult runScan(String forestName) {
        // ...
    }
}

Standard ProfessNet: nazwy interfejsów nie mają prefiksu I (to konwencja C#, nie Javy). Pakiety odwróconą domeną: com.professnet.zeus.<moduł>.

Formatowanie wg Google Style

Najważniejsze zasady, które wymusza Google Java Format:

  • 2 spacje wcięcia (nie 4, nie taby).
  • Limit linii 100 znaków.
  • Klamry zawsze, nawet przy jednolinijkowym if.
  • Każda klasa najwyższego poziomu w osobnym pliku.
// dobrze — klamry zawsze, nawet przy jednej instrukcji
if (probe == null) {
  return Optional.empty();
}

// źle — brak klamer
if (probe == null) return Optional.empty();

Importy

Importujemy konkretne klasy, nie używamy gwiazdek. Importy statyczne tylko dla asercji/utility, czytelnie.

// źle — import gwiazdkowy
import java.util.*;

// dobrze — jawne importy
import java.util.List;
import java.util.Optional;

Optional zamiast null w API

Metody, które mogą nie zwrócić wartości, zwracają Optional<T>, a nie null.

public Optional<Probe> findByHost(String host) {
  return repository.findByHost(host);
}

Standard ProfessNet: publiczne API nie zwraca null dla „braku wyniku" — używamy Optional. null jako wartość kolekcji jest zakazany; pusta lista zamiast null.

Automatyzacja stylu

Styl pilnuje Spotless z formaterem Google Java Format, podpięty do builda.

<!-- Maven: spotless-maven-plugin -->
<configuration>
  <java>
    <googleJavaFormat><version>1.22.0</version></googleJavaFormat>
  </java>
</configuration>
mvn spotless:check     # CI: weryfikuje styl
mvn spotless:apply     # lokalnie: formatuje

Wskazówka: dołóż Checkstyle z konfiguracją Google, żeby pilnować reguł, których sam formatter nie złapie (np. nazewnictwo, kolejność modyfikatorów).


Google Java Style + Spotless + Checkstyle w buildzie dają jednolity, czytelny kod bez ręcznych poprawek na review. Dyskusję o formatowaniu zastępuje maszyna, a my skupiamy się na logice.