Gettery i settery w Javie

Gettery i settery w Javie
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Chciałabym, aby ktoś na prostym przykładzie wytłumaczył mi o co chodzi z getterami i setterami w Javie, szukałam w google, na youtubie i w książce, "podstawy javy", swoją drogą dziwne że w książce nawet zdania o tym nie było.
Jedyne informacje jakie znajduje to teorie typu

"Gettery i settery to metody, które pozwalają odpowiednio pobierać i zapisywać wartość pól klasy."

Co nam w praktyce daje stosowanie takich metod ? Jak to zrozumieć ?

KM
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:473
4

Jeśli np. masz klasę "kwadrat" to pewnie nie chcesz żeby jego bok miał ujemną długość, więc jeśli zamiast umożliwienia po prostu modyfikacji zmiennej "bok" zrobisz funkcję "setBok" to w tej funkcji możesz sprawdzać czy długość boku jest sensowna i jeśli nie to np. jakiś wyjątek rzucić.

szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:7 dni
  • Lokalizacja:Kraków
  • Postów:1694
mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:597
1

Metody getter i setter bardziej ogólnie można nazwać mianem akcesorów. Pozwalają one zapewnić enkapsulację danego obiektu. Inaczej ujmując przechowujemy pola w ramach sekcji prywatnej bądź też chronionej natomiast dostęp do tych pól musimy zapewnić poprzez wykorzystanie tych metod getter i setter. Możemy tworzyć dostęp do pól do odczytu z wykorzystaniem metod get, lub/oraz do zapisu z wykorzystaniem metod set. Dzięki temu wyodrębniamy jakiś interfejs dostępu do danych, kolejną zaletę napisał kolega powyżej.

shagrin
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

Poza tym, niektóre wartości obiektu mogą być np. automatycznie wyliczane na podstawie innych pol, wtedy raczej nie będziesz chciała udostępnić settera dla takiego pola.

Przykład:
Klasa kwadrat, będziesz chciała miec możliwość ustawienia długości pola a i b, jednak zamiast wprowadzić manualnie wartość pola tego kwadratu, raczej zadbasz o to, aby getPole() automatycznie je wyliczyło na podstawie podanych boków.

Czasem tez dany obiekt nie może istnieć bez jakiejś wartości, np Użytkownik bez loginu.
W takiej sytuacji powinnaś udostępnić konstruktor, w którym użytkownik będzie musiał podać login, sama metoda setLogin() może wtedy być pominięta.


W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

A w takim typowo prostym programie gdzie wczytuję, wyświetlam imię i nazwisko:

Kopiuj
public class firstHello {

	static Scanner wczytywarka = new Scanner(System.in);
	
	public static void main(String[] args) 
	{
		
		System.out.println("Podaj swoje imie: ");
		String imie = pobierzDane();
		System.out.println("Twoje imie to: " + imie);
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko = pobierzDane();
		System.out.println("Twoje nazwisko to: " + nazwisko);
	}

	public static String pobierzDane() 
	{
	    return wczytywarka.nextLine();
	}
	
}

Można na siłę użyć getterów i setterów ? Jakby to wyglądało ?
Moim zdaniem do takiego zadania nie jest to potrzebne, ale czytałam że trzeba od samego początku uczyć się tego używać nawet w miejscach które mogą się obyć bez tego.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@wioletta90 gettery i settery są związane z klasami/strukturami a twój program ma słowo class tylko dlatego że java wymaga żeby main() było w jakiejś klasie.
Wyobraź sobie że masz klasę

Kopiuj
class Osoba{
    private final String imie;
    private final String nazwisko;
}

i to do takiego obiektu chcesz wczytać dane a potem je wypisać...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

więc dodałam klasę Osoba, ale musiałam usunąć to

final
bo przecież imiona będą się zmieniały, a z tego co przeczytałam final oznacza że coś będzie niezmienne

przedstawia się to tak:

Kopiuj
public class Osoba {

    private String imie;
    private String nazwisko;
	
    public String getImie() {
    	return imie;
    }
    
    public void setImie(String imie) {
    	this.imie = imie;
    }
    
    public String getNazwisko() {
    	return nazwisko;
    }
    
    public void setNazwisko(String nazwisko) {
    	this.nazwisko = nazwisko;
    }
    
    
    
	static Scanner wczytywarka = new Scanner(System.in);
	
	public static void main(String[] args) 
	{
		Osoba osobnik = new Osoba();
		
		System.out.println("Podaj swoje imie: ");
		osobnik.setImie(pobierzDane());
		
		
		System.out.println("Podaj swoje nazwisko: ");
		osobnik.setNazwisko(pobierzDane());
		
	}

	public static String pobierzDane() 
	{
	    return wczytywarka.nextLine();
	}
	
}

czy tak to się robi ?

edytowany 1x, ostatnio: wioletta90
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Ano usuwanie tego finala to zły pomysł. Obiekty mutowalne są bardzo niewygodne i należy się ich wystrzegać jak ognia. Najwygodniej pracuje się z obiektami które nie mogą sie już zmienić po utworzeniu. Oczywiscie wtedy trzeba by zrobić jakieś

Kopiuj
new Osoba(wczytajDane(), wczytajDane());

Poza tym ta "wczytywarka" powinna być zmienną w funkcji main() a nie statycznym polem klasy. W ogóle klasa z main() raczej nie powinna mieć żadnych pól.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0
  1. Rozumiem, że obiekty mutowalne to takie które się zmieniają, ale
Kopiuj
private final String imie;

to pole a nie obiekt ?

  1. Takie rzeczy jak imię, nazwisko w programach raczej będę się zmieniały, a
Kopiuj
final

chyba to zablokuje i będzie jedno stałe imię/nazwisko ?

  1. Tego nie rozumiem od poczatku do końca:

Oczywiscie wtedy trzeba by zrobić jakieś

Kopiuj
new Osoba(wczytajDane(), wczytajDane());
  1. Gdy usunęłam static i przeniosłam
Kopiuj
Scanner wczytywarka = new Scanner(System.in);

do metody main() z klasy, to w metodzie pobierzDane() podkreśliło mi "wczytywarka" i wyświetliło bład "wczytywarka cannot be resolved", jak sobie z tym poradzić ?

W ogóle klasa z main() raczej nie powinna mieć żadnych pól.

Chodzi o metodę main() ? Jeżeli nie, to co to jest klasa z main() ? Tak jak mówi nazwa? Klasa w której jest metoda(main) ? W sumie jeszcze nie widziałam programu z dwiema klasami.

edytowany 1x, ostatnio: wioletta90
MU
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Polska, Wrocław
  • Postów:26
0

Klasa z main() to jakas klasa testowa. Np.:
public class JakasKlasaTestowa{
//tutaj nie ma pol zadnych
public static void main(String[] args){
...

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

@wioletta90 obiekty mutowalne to takie które mogą zmieniać swój stan, a stan obiektu zwykle określają jego pola właśnie. Nie odróżniasz OBIEKTU od KLASY. Klasą jest np. Krzesło a obiektem może być krzesło na którym teraz siedzisz i krzesła które masz w kuchni. Widzisz różnicę? Polem klasy może być materiał z którego wykonane jest krzesło, a każde z twoich krzeseł może być wykonane z innego materiału. Ten materiał zapewne jest "niezmienny" tzn drewniane krzesło nagle nie stanie sie metalowe. Więc jak widzisz niezmienność/niemutowalność nijak nie sprawia że nie możesz mieć różnych krzeseł. Tak samo jest z Osobami. Osoba raczej nie zmieni nagle swojego imienia i nazwiska ;]
Ten scanner musisz sobie teraz do tej metody przekazać jako parametr. Dużo łatwiej analizuje się kod kiedy metody/funkcje dostają w parametrach obiekty z którymi mają pracować.
Nie, nie chodzi mi o metodę main. Chodzi mi o klasę w której masz main(). Ta klasa powinna zawierać tylko tego maina i nic więcej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
2

Ale kombinujecie. @wioletta90 pyta o tak podstawowe rzeczy jak akcesory, dopiero zaczyna się uczyć OOP a @Shalom z mutowalnością wyskakuje.

@wioletta90 jak najbardziej usuń final i korzystaj z akcesorów żeby zmieniać wartości obiektu. Na bardziej skomplikowane zagadnienia przyjdzie jeszcze czas. Ważne żebyś zrozumiała sens używania akcesorów.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
Zobacz pozostały 1 komentarz
W9
a to Zelent źle uczy ? Nie jestem w temacie a oglądałam trochę.
Shalom
To przestań oglądać bo więcej z tego będzie krzywdy niż pożytku.
Aventus
@Shalom Mutowalność ma swoje zalety i wady tak samo jak i niemutowalność. Co za tym idzie nie są one ani dobre ani złe, wszystko zależy od kontekstu w jakich się ich używa. Twierdząc że niemutowalność jest jedyną słuszną drogą- to jest dopiero "doskonały plan".
Shalom
Chętnie poczytam o tych rzekomych zaletach mutowalności, szczególnie w kontekście dużych, prawdziwych aplikacji z wielowątkowością i wielodostępem.
T9
wydajność :P
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

a więc stworzyłam klasę main w której jest sama metoda main() i mój program wygląda następująco:

Kopiuj
package pl.wioletta.hello;

import java.util.Scanner;

public class Osoba {

    private final String imie;
    private final String nazwisko;
	
    public String getImie() {
    	return imie;
    }
    
    public void setImie(String imie) {
    	this.imie = imie;
    }
    
    public String getNazwisko() {
    	return nazwisko;
    }
    
    public void setNazwisko(String nazwisko) {
    	this.nazwisko = nazwisko;
    }
    
    
    
    public class KlasaZMain {
    	   	 
	
	public static void main(String[] args) 
	{
		Scanner wczytywarka = new Scanner(System.in);
		
		Osoba osobnik = new Osoba();
		
		System.out.println("Podaj swoje imie: ");
		osobnik.setImie(pobierzDane());
		
		
		System.out.println("Podaj swoje nazwisko: ");
		osobnik.setNazwisko(pobierzDane());
		
	}

    }	
	
	
	public static String pobierzDane() 
	{
	    return wczytywarka.nextLine();
	}
	
}

teraz mówisz, że muszę przekazać skanner do metody jako parametr, ale do której metody ? pobierz Dane() ? tam już chyba jest

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1
  1. To się teraz nie skompiluje bo dla zmiennych final nie możesz mieć settera ;]

tam już chyba jest

O RLY? String pobierzDane() ja tu widzę puste nawiasy w nagłowki metody, więc chyba jednak parametrów nie ma...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0
  1. jak setterów być nie może, to w sumie gettery też nie są potrzebne ?
  2. Pierwszy raz to robie ale chyba dobrze:
Kopiuj
	public static String pobierzDane(Scanner wczytywarka) 
	{
	    return wczytywarka.nextLine();
	}
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Gettery i settery generalnie są uważane za nieładne przy obiektach domenowych bo łamią enkapsulacje, niemniej czasem trudno ich uniknąć. Wyobraź sobie że masz teraz listę List<Osoba> w programie i chcesz wybrać z tej listy tylko osoby z nazwiskiem na jakaś literkę, albo o danym imieniu. Jak zrobisz to bez gettera? ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

a więc usunęłam settery i przekazałam odpowiednie parametry do metody pobierzDane(), teraz nie wiem jak bez setterów pobrać dane od użytkownika, wcześniej miałam

osobnik.setImie(pobierzDane());
, czyli wywoływałam metode dla obiektu osobnik z parametrem pobierzDane() [pokazuje jak myślę, jak źle to dajcie znać]

proponuję zrobić wczytywanie dla imienia taką linijką kodu:

Kopiuj
String imie = wczytywarka.nextLine();

to co aktualnie mam:

Kopiuj
package pl.wioletta.hello;

import java.util.Scanner;

public class Osoba {

    private final String imie;
    private final String nazwisko;
	
    public String getImie() {
    	return imie;
    }
    
    
    public String getNazwisko() {
    	return nazwisko;
    }
    
        
    public class KlasaZMain {
    	   	 
	
	public static void main(String[] args) 
	{
		Scanner wczytywarka = new Scanner(System.in);
		
		Osoba osobnik = new Osoba();
		
		System.out.println("Podaj swoje imie: ");

		
		
		System.out.println("Podaj swoje nazwisko: ");

		
	}

    }	
	
	
	public static String pobierzDane(Scanner wczytywarka) 
	{
	    return wczytywarka.nextLine();
	}
	
}
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

zadam pytanie przy temacie: czy settery na DTO są okey ?


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Settery na DTO sugerują że możesz przypadkiem trafić na obiekty które nie są do końca zainicjalizowane albo są niespójne. (a piewcy DDD w ogóle powiedzą że DTO to zło ;) )


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 7 komentarzy
szarotka
abstrahując od publicznych pól, bo tego nie trzeba komentować, to ty dajesz jakąś logikę w getterach setterach?!
caer
zdaję sobie z tego sprawę, w moich własnych projektach mam normalnie prywatne. podałem to po prostu jako ciekawostkę, że ktoś coś tak dziwnego wymyślił i to funkcjonuje
KA
pytanie do @Pythonowcow - jak sobie radzicie bez getterów i setterów. oraz czy dodatkowa logika w getterach i setterach to jest okey? generalnie wiem, że jest okey w normalnych projektach jak to w życiu bywa, ale gdybyśmy znajdowali sie w idealnym świecie ideii. to czy settery i gettery to są mądre i dodatkowa logika w nich jest ok? @szarotka dała dobrą myśl
Shalom
Na przykład "logika" walidująca poprawność danych, albo aktualizująca jakieś inne pola obiektu, albo w ogóle "getter" który coś wylicza i zwraca, bo potem z takiego DTO automatem generujemy sobie JSONa i chcemy tam mieć jakąś wartość która niekoniecznie jest polem obiektu. Python ma property -> http://www.python-course.eu/python3_properties.php
szarotka
Ehhh i komu tu teraz wierzyć
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

@Shalom okey czyli załóżmy jeżeli mam:

dao (model) -> service (pluje immutable DTOsami) -> JSFowy controller widoku

to teraz w tym controlerze pobieram sobie z serwisu np. List<AccountDto> accountList i tak to mogłabym trzymać tą listę w polu w klasie kontrolera jako private List<AccountDto>
i np w takim datatable się iterować i mieć na wierszu np. input texta z value="#{acc.name}" itd... AccountDto ma settery i na końcu wołam jedynie service.update(accountList).

a tak to jak AccountDto jest immutable i nie mam setterow to co wtedy? muszę zrobić specjalnie kolejną klasę tym razem muttable opakowującą AccountDto dla jsfowego kontrolera?
interesuje mnie ten konretny przypadek z datatable.

Nie mówię, że ta dodatkowa klasa to źle tylko pytam z niewiedzy i zastanawiam się na jakim etapie złamanie tych zasad ma sens i przy jakiej skali wielkości projektu
przestrzeganie tych wszystkich zasad daje więcej czasu i fajności niż zabiera.


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 2x, ostatnio: karolinaa
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Mam nadzieje że to co nazwałaś "controller widoku" i w którym to chcesz mieć pola, to jest Managed Bean, bo inaczej to jest jakiś WTF.
To jest oczywiście szczególny przypadek kiedy robisz input beana do którego chcesz wpakować dane z Widoku, bo wtedy technologia może na tobie wymusić posiadanie bezparametrowego kontruktora i setterów (zgodnie z konwencja JavaBeans). I o ile tylko tam w sposób niejawny te settery są użyte to ok.
Analogiczny problem może występować np. dla klas @Entity ale to jest zupełnie inna bajka kiedy mówimy o czymś co wymusza na tobie użyta technologia.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
szarotka
jaki szczególny przypadek? typowa formatka!
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Tak tak managed bean. Okey czyli jednak pewnych rzeczy nie przeskoczę.


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

siedzę przy tym już długo i nic nie wymyśliłam,

liczę na jakąś podpowiedź

Kopiuj
new Osoba(wczytajDane(), wczytajDane());
Shalom
Nie bardzo rozumiem o co pytasz. Przecież masz podany kod.
shagrin
@wioletta90 no i ekstra, ja bym tylko utworzyła zmienne imię i nazwisko i przekazała do konstruktora te zmienne zamiast wczytajDane() - kwestia czytelności kodu
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

w kodzie mam

Kopiuj
Osoba osobnik = new Osoba();

czyli niby teraz do konstruktora mam przekazać jako parametr 2 takie same metod wczytajDane(), ale po co ? Chciałam,aby program wczytał imię po linijce

Kopiuj
System.out.println("Podaj swoje imie: ");

więc skąd program będzie wiedział o co chodzi ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

Jejku, no to wczytaj o_O

Kopiuj
System.out.println("Podaj swoje imie: ");
String imie = wczytajDane(scanner);
System.out.println("Podaj swoje nazwisko: ");
String nazwisko = wczytajDane(scanner);

Osoba osoba = new Osoba(imie, nazwisko);

Zaraz muszę gdzieś poszukać chyba ten link z pracą jako pomocnik piekarza...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
shagrin
Nie musisz być uszczypliwy, koleżanka rozkminia problem kilka godzin, zdarza się że po takim czasie nie dostrzega się oczywistości o_O
shagrin
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
4

OK, nie śledziłam całego wątku, ale właściwie czemu nie zrobisz:

Kopiuj
public static void main(String[] args) 
    {
        Scanner wczytywarka = new Scanner(System.in);
 
        System.out.println("Podaj swoje imie: ");
 	String imie = wczytajDane(scanner);
 
        System.out.println("Podaj swoje nazwisko: ");
 	String nazwisko = wczytajDane(scanner);

	//teraz masz juz imię i nazwisko, więc tworzysz obiekt
	Osoba osobnik = new Osoba(imie, nazwisko);
 
    }

edytowany 1x, ostatnio: shagrin
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
4

Wydaje mi się, że zbytnio kombinujesz. Nie programuj na ślepo permutacjami tylko poczytaj solidnie o podstawach i pomyśl jak to wykombinować i prawidłowo zrobić.
Nie tak byle działało tylko pomyśl tak jak komputer. Popatrz czemu nie zrobisz w taki sposób:

Kopiuj
System.out.println("Podaj swoje imie: ");
final String imie = wczytajDane(scanner);
System.out.println("Podaj swoje nazwisko: ");
final String nazwisko = wczytajDane(scanner);

final Osoba obiektOsoba = new Osoba(imie, nazwisko);

oczywiście wbij to do bloku public static void main(String[] args) { ;]

EDIT: poproszę o plusa


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 1x, ostatnio: karolinaa
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

a nie można najpierw stworzyć obiekt ?

Kilka rzeczy mam podkreślonych, chociażby parametr imie i nazwisko przy tworzeniu obiektu, tak to wygląda u mnie:

Kopiuj
package pl.wioletta.hello;

import java.util.Scanner;

public class Osoba {

    private final String imie;
    private final String nazwisko;
	
    public String getImie() {
    	return imie;
    }
    
    
    public String getNazwisko() {
    	return nazwisko;
    }
    
        
    public class KlasaZMain {
    	   	 
	
	public static void main(String[] args) 
	{
		Scanner wczytywarka = new Scanner(System.in);
						
				
		System.out.println("Podaj swoje imie: ");
		String imie = wczytajDane(Scanner);
		
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko = wczytajDane(Scanner);
		
		Osoba osobnik = new Osoba(imie, nazwisko);
	}

    }	
	
	
	public static String pobierzDane(Scanner wczytywarka) 
	{
	    return wczytywarka.nextLine();
	}
	
}
shagrin
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

W klasie Osoba brakuje Ci konstruktora, który przyjmie te dwa parametry.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.