Prośba o sprawdzenie kodu, czy dobrze używam static?

0

Witam. Ostatnio dużo zastanawiałem się nad tym jak używać poprawnie static i final w kodzie. Program, który chcę zrobić ma konwertować stopnie Celsiusza na Fahrenheita i z powrotem. Klasa CelsiusToFahrenheit zawiera main i wyświetla okno. Jeśli dobrze rozumiem, to w niej jeśli już powinny się znajdować zmienne final o ile jakieś bym zadeklarował. Listener_CelToFahr i Listener_FahrToCel to dwie klasy obsługujące dwa ActionListenery zgodnie z tym co mi tutaj doradzano. Wymyśliłem sobie, że żeby nie powtarzać deklaracji zmiennych w klasie main, w każdym ActionListenerze i nie tworzyć zbyt długich konstruktorów, to dobrze byłoby te zmienne przerzucić do jednej klasy (Variables) i w niej zadeklarować je jako static. Chciałbym prosić o ocenę, czy to wygląda tak jak należy:

public class CelsiusToFahrenheit extends JFrame{

	public CelsiusToFahrenheit() {
		setSize(400, 200);
		setTitle(Variables.title);
		setLayout(null);
		Variables.lCelsius = new JLabel("Set data:");
		Variables.lCelsius.setBounds(20, 20, 150, 20);
		add(Variables.lCelsius);
		
		Variables.tInput = new JTextField("");
		Variables.tInput.setBounds(170, 20, 150, 20);
		add(Variables.tInput);
		Variables.tInput.setToolTipText("Enter the temperature");

		Variables.lFahrenheit = new JLabel("Score:");
		Variables.lFahrenheit.setBounds(20, 70, 150, 20);
		add(Variables.lFahrenheit);

		Variables.tOutput = new JTextField("");
		Variables.tOutput.setBounds(170, 70, 150, 20);
		add(Variables.tOutput);

		Variables.bConvert = new JButton("Convert");
		Variables.bConvert.setBounds(100, 120, 150, 20);
		add(Variables.bConvert);


		Variables.bgSize = new ButtonGroup();
		Variables.CelToFahr = new JRadioButton("Celsius to Fahrenheit", true);
		Variables.CelToFahr.setBounds(20, 150, 180, 20);
		Variables.bgSize.add(Variables.CelToFahr);
		add(Variables.CelToFahr);

		Variables.FahrToCel = new JRadioButton("Fahrenheit to Celsius", false);
		Variables.FahrToCel.setBounds(200, 150, 180, 20);
		Variables.bgSize.add(Variables.FahrToCel);
		add(Variables.FahrToCel);
		
		Listener_CelToFahr lctf = new Listener_CelToFahr();
		Listener_FahrToCel lftc = new Listener_FahrToCel();
		
		Variables.bConvert.addActionListener(lctf);
		Variables.bConvert.addActionListener(lftc);		
	}
	
	public static void main(String[] args) {
		CelsiusToFahrenheit ceToFahr = new CelsiusToFahrenheit();
		ceToFahr.setVisible(true);
		ceToFahr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
public class Variables {
	
	static JLabel lCelsius, lFahrenheit;
	static JButton bConvert;
	static ButtonGroup bgSize;
	static JRadioButton CelToFahr, FahrToCel;
	static JTextField tInput, tOutput;	
	static double tempCelsius, tempFahrenheit;
	static String title = "Temperature";
}
public class Listener_CelToFahr extends Variables implements ActionListener {
	
	public void actionPerformed(ActionEvent arg0) {
		if (CelToFahr.isSelected()) 
		{
			tempCelsius = Double.parseDouble(tInput.getText());
			tempFahrenheit = 32.0 + (9.0 / 5.0) * tempCelsius;
			tOutput.setText(String.valueOf(tempFahrenheit));			
		}		
	}
}
public class Listener_FahrToCel extends Variables implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		if(!CelToFahr.isSelected()) {
		tempFahrenheit = Double.parseDouble(tInput.getText());
		tempCelsius = (tempFahrenheit-32)/1.8;
		tOutput.setText(String.valueOf(tempCelsius));	
		}
	}
}
0

DLaczego extendujesz klase Variables, skoro specjalnie zadeklarowałeś te zmienne jako static?

Jakie według Ciebie korzyści daje static?

1

Rozszerzanie Variables w tym wypadku to jedna wielka pomyłka

Variables.tOutput.setText("jeden wielki LOL");

tak się dostajesz do pól statycznych, nie ma potrzeby rozszerzać tej klasy.

0
kixe52 napisał(a):

DLaczego extendujesz klase Variables, skoro specjalnie zadeklarowałeś te zmienne jako static?

Jakie według Ciebie korzyści daje static?

No żeby nie musieć deklarować Variables.tempCelsius albo Variables.tempFahrenheit tylko tempCelsius i tempFahrenheit. No dobra czyli zakładając że wywalę extends Variables z tych dwóch klas z Action Listenerami i będę się do wszystkich pól odwoływał Variables.tempFahrenheit, Variables.tempCelsius, Variables.tInput itd., to cała resza wygląda tak jak należy?

1

Nie, tworzysz w ten sposób zmienne globalne. Statici mogą być, ale jako stałe (np. licza PI, adres URL etc) ale nie buttony :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1