02. december 2005 - 22:03Der er
12 kommentarer og 2 løsninger
Brug af konstanter ud fra bruger input
Indrømmet, kryptisk titel, men mit problem er svært at forklare. Derfor har jeg lavet følgende 3 klasser til at illustrere det.
class class1 { public static void main(String[] args) { char Bogstav = args[0].toUpperCase().charAt(0); if ('A' <= Bogstav && Bogstav <= 'C') { System.out.println(class2.A.getField()); } } }
class class2 { public static class3 A = new class3("A"); public static class3 B = new class3("B"); public static class3 C = new class3("C"); }
class class3 { private String field;
public class3(String myString) { field = myString; }
public String getField() { return field; } }
Problemet ligger i class2.A.getField(). Jeg vil gerne kunne bruge variablen A, B eller C afhængigt af brugerinputtet.
Og ja, jeg kunne godt lave en if-else sætning og tjekke for alle 3 muligheder, men som sagt er dette blot en test, jeg har mange flere variabler i min kode, derfor er det ikke en mulighed.
Jeg har prøvet med getField og getMethod og jeg ved snart ikke hvad, men jeg kan ikke få startet getField() selvom jeg har fået fat i den rigtige variabel. invoke virkede ikke af en eller anden grund jeg ikke lige kan huske.
Derfor vil jeg gerne høre hvordan jeg så kan få fat i den rigtige variabel.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
public class Ref1 { public String a; public String b; public String c; public Ref1() { a = "I am a"; b = "I am b"; c = "I am c"; } public static void main(String[] args) throws Exception { Ref1 o = new Ref1(); System.out.println((String)o.getClass().getField("a").get(o)); System.out.println((String)o.getClass().getField("b").get(o)); System.out.println((String)o.getClass().getField("c").get(o)); } }
public class Ref2 { private String a; private String b; private String c; public Ref2() { a = "I am a"; b = "I am b"; c = "I am c"; } public static void main(String[] args) throws Exception { Ref2 o = new Ref2(); System.out.println((String)o.getClass().getMethod("getA", new Class[] { }).invoke(o, new Object[] { })); System.out.println((String)o.getClass().getMethod("getB", new Class[] { }).invoke(o, new Object[] { })); System.out.println((String)o.getClass().getMethod("getC", new Class[] { }).invoke(o, new Object[] { })); } public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } }
Hmm...ja, jeg har været ude i præcis det samme selv, men jeg har udeladt 2 ting kan jeg se :) Jeg har aldrig haft .get() med på .getField()...hvorfor er det nødvendigt? Jeg troede da .getField returnerede selve variablen.
Og så havde jeg også problemer med invoke...jeg kan nu ikke huske hvorfor, nå men jeg vil lige afprøve de eksempler der :)
Begge arne's eksempler virker jo som smurt :) mwl, dit eksempel giver en del fejl, så det har jeg opgivet :p Men hvis arne lige vil smide et svar, så får I begge point :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.