Forum » Programiranje » java - konstante
java - konstante
Zzzzzzz ::
Torej, imam majčken problemček s konstantami v javi. In sicer naj razložim kar na primeru:
Problem tle je, da "case" zahteva konstantno vrednost in mu jo v bistvu dam, ampak on to razume kot spremenljivko.
Kako bi se dalo to rešit da bi mi zgornja koda delala b.p. ne da bi mi treba pisat konstante znova in znova? Ker jih uporabljam na več mestih in če jih bo treba kdaj spreminjat bo kr nerodno vse skupaj.
class Razred {
static final int IZBIRA_1 = 120, IZBIRA_2 = 300, IZBIRA_3 = 450;
void Procedura(int izbira) {
switch(izbira) {
case this.IZBIRA_1:
// do sth.
break;
case this.IZBIRA_2:
// do sth.
break;
case this.IZBIRA_3:
// do sth.
break;
}
}
}
Problem tle je, da "case" zahteva konstantno vrednost in mu jo v bistvu dam, ampak on to razume kot spremenljivko.
Kako bi se dalo to rešit da bi mi zgornja koda delala b.p. ne da bi mi treba pisat konstante znova in znova? Ker jih uporabljam na več mestih in če jih bo treba kdaj spreminjat bo kr nerodno vse skupaj.
stefanc ::
Očitno prevajalnik zmede this.IZBIRA_1.
Uporabi rajši Razred.IZBIRA_1. (tako je tudi priporočen način dostopanja do statičnih polj).
Načeloma je prevajalniku vseeno (pri this.IZBIRA_1 bi dobil warning), zgleda pa (ugibam) da če napišeš this.IZBIRA_1, tega ne prevede kot konstantno vrednost ampak kot sklic, kar pa ni dobro za switch stavek.
Drugi način pa je da konstante daš v svoj interface:
public interface Konstante
{
public static final int IZBIRA_1 = 120, IZBIRA_2 = 300, IZBIRA_3 = 450;
}
razred pa napišeš takole:
class Razred implements Konstante
{
public void test()
{
int izbira = IZBIRA_1;
switch (izbira)
{
case IZBIRA_1 :
// do sth.
break;
case IZBIRA_2 :
// do sth.
break;
case Konstante.IZBIRA_3 :
// do sth.
break;
}
}
}
Do konstant lahko potem dostopaš z Konstante.IZBIRA_3 ali pa samo IZBIRA_3.
Konstante pa imaš zbrane tematsko v različnih interfacih, v definiciji razreda pa takoj vidiš katere uporablja.
Uporabi rajši Razred.IZBIRA_1. (tako je tudi priporočen način dostopanja do statičnih polj).
Načeloma je prevajalniku vseeno (pri this.IZBIRA_1 bi dobil warning), zgleda pa (ugibam) da če napišeš this.IZBIRA_1, tega ne prevede kot konstantno vrednost ampak kot sklic, kar pa ni dobro za switch stavek.
Drugi način pa je da konstante daš v svoj interface:
public interface Konstante
{
public static final int IZBIRA_1 = 120, IZBIRA_2 = 300, IZBIRA_3 = 450;
}
razred pa napišeš takole:
class Razred implements Konstante
{
public void test()
{
int izbira = IZBIRA_1;
switch (izbira)
{
case IZBIRA_1 :
// do sth.
break;
case IZBIRA_2 :
// do sth.
break;
case Konstante.IZBIRA_3 :
// do sth.
break;
}
}
}
Do konstant lahko potem dostopaš z Konstante.IZBIRA_3 ali pa samo IZBIRA_3.
Konstante pa imaš zbrane tematsko v različnih interfacih, v definiciji razreda pa takoj vidiš katere uporablja.
Zzzzzzz ::
stefanc, najlepša hvala. Tvoj način je odličen - zelo modularen.
Še tole: A lahko isti razred uporablja več interfaceov (npr. public class Razred implements A, B, C {})?
Še tole: A lahko isti razred uporablja več interfaceov (npr. public class Razred implements A, B, C {})?
Zgodovina sprememb…
- spremenil: Zzzzzzz ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Problem s Scanner-jemOddelek: Programiranje | 2471 (2265) | Zlatan |
» | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1667 (1612) | Cvenemir |
» | c sharp LinkedList - NalogaOddelek: Programiranje | 1865 (1816) | Msatir |
» | [C] čuden izpis iz txt dat. na zaslonOddelek: Programiranje | 1680 (1417) | l0g1t3ch |
» | Java problemčekOddelek: Programiranje | 1461 (1254) | Imortales |