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

Permalänk

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 });

Permalänk
Hedersmedlem

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.

Permalänk
99:e percentilen

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.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
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

Permalänk
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! });

Permalänk
99:e percentilen
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.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
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.

Permalänk
99:e percentilen
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.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
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

Permalänk
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.

Permalänk
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.