Skocz do zawartości
  • 0

Metody statyczne


kerpson

Pytanie

Czy utilsy tego typu powinny byc statyczne, czy jednak obiektowe ?

package me.kerpson.core.utils;

import java.util.HashMap;
import java.util.Map;

import me.kerpson.core.KCore;

import org.bukkit.entity.Player;

public class MsgUtil {
	
	KCore plugin;
	private final Map<Player, Player> msg = new HashMap<>();
	
	public MsgUtil(KCore plugin){
		this.plugin = plugin;
	}
	
	public void addPlayer(Player p, Player o){
		msg.put(p, o);
		msg.put(o, p);
	}
	
	public void removePlayer(Player p, Player o){
		msg.remove(p);
		msg.remove(o);
	}
	
	public Player getPlayer(Player p){
		return msg.get(p);
	}

}

 

Odnośnik do komentarza
https://skript.pl/temat/32518-metody-statyczne/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Utils... (inaczej helper) - czyli coś gdzie wrzucasz wszystko co nie pasuje do żadnej twojej klasy...

Założenie jest takie, że musisz zrobić jakąś metodę, ale nie ma żadnej klasy która reprezentowała by strukturę, gdzie taka metoda by pasowała... albo potrzebujesz zrobić metodę do klasy finalnej, więc nierozszerzalnej, lub coś w tym rodzaju. W związku z tym klasa ta nie ma obiektów. Powinieneś tą klasę oznaczyć jako final, tak, aby nikt nie mógł jej rozszerzać oraz zrobić prywatny konstruktor bez parametrów. Dzięki temu stworzenie instancji tej klasy nie będzie możliwe.

Teraz wady i zalety takiego rozwiązania. Zaletą jest na pewno łatwy dostęp do takich metod. Są to, a przynajmniej powinny, publiczne metody statyczne, a więc wystarczy odnieść się do klasy i wywołać statyczną metodę. Wad natomiast znalazłbym kilka. Po pierwsze globalność - takiej metody nie da się nadpisać i zmienić jej zachowania - czyli jednej z najważniejszych zalet programowania obiektowego. W najlepszej sytuacji powinna być klasa, która będzie coś reprezentować, którą można rozszerzyć i nadpisać metody, by zmienić ich zachowanie. Po drugie trudność debugowania. Metoda ta jest globalna, dostępna zewsząd. Debugowanie takiej metody w poszukiwaniu zmian jest znacznie bardziej utrudnione.

Czyli podsumowując takie utils to metody, które nie pasują do żadnej klasy, którą masz, więc wrzucasz je do jednego worka, aka "utils"/"helper". Metody w tej klasie zawarte powinny być publiczne i statyczne, co niesie za sobą łatwość dostępu, ale za to trudność debugowania i niezmienność (brak możliwości zmiany ich zachowania).

Jeszcze inną kwestią jest, tutaj nie poruszona, przechowywanie modyfikowalnych (mutable) danych globalnie, czyli w polach statycznych.

Pozdrawiam Czerwono ;)

Odnośnik do komentarza
https://skript.pl/temat/32518-metody-statyczne/#findComment-211358
Udostępnij na innych stronach

  • 0
Godzinę temu, TheMolkaPL napisał:

Utils... (inaczej helper) - czyli coś gdzie wrzucasz wszystko co nie pasuje do żadnej twojej klasy...

Założenie jest takie, że musisz zrobić jakąś metodę, ale nie ma żadnej klasy która reprezentowała by strukturę, gdzie taka metoda by pasowała... albo potrzebujesz zrobić metodę do klasy finalnej, więc nierozszerzalnej, lub coś w tym rodzaju. W związku z tym klasa ta nie ma obiektów. Powinieneś tą klasę oznaczyć jako final, tak, aby nikt nie mógł jej rozszerzać oraz zrobić prywatny konstruktor bez parametrów. Dzięki temu stworzenie instancji tej klasy nie będzie możliwe.

Teraz wady i zalety takiego rozwiązania. Zaletą jest na pewno łatwy dostęp do takich metod. Są to, a przynajmniej powinny, publiczne metody statyczne, a więc wystarczy odnieść się do klasy i wywołać statyczną metodę. Wad natomiast znalazłbym kilka. Po pierwsze globalność - takiej metody nie da się nadpisać i zmienić jej zachowania - czyli jednej z najważniejszych zalet programowania obiektowego. W najlepszej sytuacji powinna być klasa, która będzie coś reprezentować, którą można rozszerzyć i nadpisać metody, by zmienić ich zachowanie. Po drugie trudność debugowania. Metoda ta jest globalna, dostępna zewsząd. Debugowanie takiej metody w poszukiwaniu zmian jest znacznie bardziej utrudnione.

Czyli podsumowując takie utils to metody, które nie pasują do żadnej klasy, którą masz, więc wrzucasz je do jednego worka, aka "utils"/"helper". Metody w tej klasie zawarte powinny być publiczne i statyczne, co niesie za sobą łatwość dostępu, ale za to trudność debugowania i niezmienność (brak możliwości zmiany ich zachowania).

Jeszcze inną kwestią jest, tutaj nie poruszona, przechowywanie modyfikowalnych (mutable) danych globalnie, czyli w polach statycznych.

Pozdrawiam Czerwono ;)

Wow, dzięki za ładną oraz dokładną rozpiskę ^^

Odnośnik do komentarza
https://skript.pl/temat/32518-metody-statyczne/#findComment-211363
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...