Hur skulle du vilja minimera denna Java-kod så man slipper repetera allt?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008

Hur skulle du vilja minimera denna Java-kod så man slipper repetera allt?

Jag har denna Java-kod. Så här ska det inte behöva se ut. Finns det något sätt där jag kan anropa en metod med tre parametrar (dropDown, MenuItem, void), där void är en privat metod. Då skulle detta gå mycket fortare istället för att skriva ut så här.

Vad tror ni? Jag använder tyvärr Java 8 fortfarande då jag utvecklar appar för Iphone och Android via GluonHQ's JavaFX ramverk.

/* * Listener for data type */ dataTypeDropDown.selectedItemProperty().addListener(e->{ dataTypeMenuItem = dataTypeDropDown.getSelectedItem(); // Save hideLabels(); }); /* * Listener for delimiter */ delimiterDropDown.selectedItemProperty().addListener(e->{ delimiterMenuItem = delimiterDropDown.getSelectedItem(); // Save reloadBatchLabels(); }); /* * Listener for train data */ trainDataDropDown.selectedItemProperty().addListener(e->{ trainDataMenuItem = trainDataDropDown.getSelectedItem(); // Save reloadBatchLabels(); }); /* * Listener for eval data */ evalDataDropDown.selectedItemProperty().addListener(e->{ evalDataMenuItem = evalDataDropDown.getSelectedItem(); // Save }); /* * Listener for batch size */ batchSizeDropDown.selectedItemProperty().addListener(e->{ batchSizeMenuItem = batchSizeDropDown.getSelectedItem(); // Save }); /* * Listener for label index from */ labelIndexFromDropDown.selectedItemProperty().addListener(e->{ labelIndexFromMenuItem = labelIndexFromDropDown.getSelectedItem(); // Save }); /* * Listener for label index to */ labelIndexToDropDown.selectedItemProperty().addListener(e->{ labelIndexToMenuItem = labelIndexToDropDown.getSelectedItem(); // Save }); /* * Listener for possible labels */ numPossibleLabelsDropDown.selectedItemProperty().addListener(e->{ numPossibleLabelsMenuItem = numPossibleLabelsDropDown.getSelectedItem(); // Save }); /* * Listener for data normalization */ datanormalizerDropDown.selectedItemProperty().addListener(e->{ datanormalizerMenuItem = datanormalizerDropDown.getSelectedItem(); // Save });

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Okt 2006

Dina drop downs och menu items kan läggas i någon form av array eller lista som du istället loopar över. De behöver ju såklart sammankopplas så man vet vilket menu item som hör till vilken drop down.

Det löser ett problem, sen hur du vill göra dina specifika saker som reloadBatchLabels kanske någon annan kan lösa.

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011

För mig ser det ut som att du kanske behöver se över koden som helhet. Varför alla dessa globala variabler (dataTypeMenuItem, delimiterMenuItem etc) som du verkar mutera i tid och otid, till exempel?

Skrivet av heretic16:

Finns det något sätt där jag kan anropa en metod med tre parametrar (dropDown, MenuItem, void), där void är en privat metod.

En detalj i sammanhanget, men som jag tolkar dig kommer du behöva ett annat namn här, då void är ett nyckelord i Java.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Alling:

För mig ser det ut som att du kanske behöver se över koden som helhet. Varför alla dessa globala variabler (dataTypeMenuItem, delimiterMenuItem etc) som du verkar mutera i tid och otid, till exempel?

En detalj i sammanhanget, men som jag tolkar dig kommer du behöva ett annat namn här, då void är ett nyckelord i Java.

Det är inte globala variabler. Det är fält

Eclipse skrev ut void, inte jag

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Shimonu:

Dina drop downs och menu items kan läggas i någon form av array eller lista som du istället loopar över. De behöver ju såklart sammankopplas så man vet vilket menu item som hör till vilken drop down.

Det löser ett problem, sen hur du vill göra dina specifika saker som reloadBatchLabels kanske någon annan kan lösa.

Jag ska testa med detta! Tack.

Edit:
Det blir ett problem när jag utför t.ex. detta. Jag kan inte skicka till mitt privata fält. Är det nu man ska använda HashCode?

numPossibleLabelsDropDown.selectedItemProperty().addListener(e->{ ----> numPossibleLabelsMenuItem <--- = numPossibleLabelsDropDown.getSelectedItem(); // <--- här! });

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011
Skrivet av heretic16:

Det är inte globala variabler. Det är fält

Det jag menar är att de är globala med avseende på metoderna i vilka du använder dem.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Alling:

Det jag menar är att de är globala med avseende på metoderna i vilka du använder dem.

Brukar alltid ha många fält. Nackdelen är att det blir för mycket ibland.
Jag tänker att varje gång jag gör new på samma fält så måste garbage collector gå in och städa upp. Då är det bättre att jag deklarerar bara en gång.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011
Skrivet av heretic16:

Jag ska testa med detta! Tack.

Edit:
Det blir ett problem när jag utför t.ex. detta. Jag kan inte skicka till mitt privata fält. Är det nu man ska använda HashCode?

numPossibleLabelsDropDown.selectedItemProperty().addListener(e->{ ----> numPossibleLabelsMenuItem <--- = numPossibleLabelsDropDown.getSelectedItem(); // <--- här! });

Du vill inte berätta på vilket sätt det "blir ett problem"?

Skrivet av heretic16:

Brukar alltid ha många fält. Nackdelen är att det blir för mycket ibland.

Det finns en bra formel jag brukar använda som tumregel: en muterbar variabel = en huvudvärk.

Citat:

Jag tänker att varje gång jag gör new på samma fält så måste garbage collector gå in och städa upp. Då är det bättre att jag deklarerar bara en gång.

Ingen aning om vad du menar här; utveckla gärna om du vill.

Jag tror fortfarande att du egentligen inte behöver ett enda av de fält som förekommer i koden i trådstarten, och att de inte tillför någonting annat än potentiella buggar och onödigt underhållsarbete. Den bästa koden är ingen kod alls.

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
På yogamatta
Registrerad
Jul 2011
Skrivet av heretic16:

Brukar alltid ha många fält. Nackdelen är att det blir för mycket ibland.
Jag tänker att varje gång jag gör new på samma fält så måste garbage collector gå in och städa upp. Då är det bättre att jag deklarerar bara en gång.

Nej det här är inte bättre därför då håller du dessa fält i minnet hela tiden och får sämre prestanda.

Skapa objekt då de behövs istället och låt GC städa upp så får du ett mycket mer välfungerande program och du kommer lättare hitta buggar eftersom du vet under vilka omständigheter objekten existerar.

GCn har optimerats i över 20 år så den vet vad den håller på med.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Xenofonus:

Nej det här är inte bättre därför då håller du dessa fält i minnet hela tiden och får sämre prestanda.

Skapa objekt då de behövs istället och låt GC städa upp så får du ett mycket mer välfungerande program och du kommer lättare hitta buggar eftersom du vet under vilka omständigheter objekten existerar.

GCn har optimerats i över 20 år så den vet vad den håller på med.

Skickades från m.sweclockers.com

Tack! Detta ska jag lägga på minnet.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Alling:

Du vill inte berätta på vilket sätt det "blir ett problem"?

Det finns en bra formel jag brukar använda som tumregel: en muterbar variabel = en huvudvärk.

Ingen aning om vad du menar här; utveckla gärna om du vill.

Jag tror fortfarande att du egentligen inte behöver ett enda av de fält som förekommer i koden i trådstarten, och att de inte tillför någonting annat än potentiella buggar och onödigt underhållsarbete. Den bästa koden är ingen kod alls.

Såg inte din post.

Jag löste problemet igenom att inte använda denna typ av kod Alltså ingen kod alls.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |