27. januar 2005 - 16:33
Der er
6 kommentarer og 1 løsning
Class.forName's virkemåde
Et sikkert simpelt spm. :-) Jeg definerer to udgaver af samme klasse: public class Class1 { public int i; public Class1() { i=1; } } og i en anden pakke: package div; public class Class1 { public int i; public Class1() { i=2; } } Herefter prøver jeg med: import div.*; public class Benyt_Class1 { public static void main(String[] args) throws Exception { Class.forName("Class1"); Class1 c1=new Class1(); System.out.println(c1.i); Class.forName("div.Class1"); Class1 c2=new Class1(); System.out.println(c2.i); } } - og får flg. output: 1 1 Hvorfor får jeg ikke '2' som output efter load af div.Class1?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
27. januar 2005 - 16:37
#1
Prøv: div.Class1 c2=new div.Class1();
27. januar 2005 - 16:39
#2
div.Class1 "overskriver" ikke Class1 - de ligger der begge og Java kan ikke gætte at Class1 c2=new Class1(); er div.Class1 c2=new div.Class1(); selvom div.Class1 var den sidste klasse du loadede.
27. januar 2005 - 16:41
#3
Hm Iøvrigt tror jeg såmænd at din kode virker uden kald af Class.forName overhovedet, da ægte dynamisk loading ser ud som: EtInterface i = (EtInterface)Class.forName("EnKlasse").newInstance();
27. januar 2005 - 16:52
#4
->arne_v: Det prøver jeg lige..men ideen her er netop at "overskrive" Class1, så koden efterfølgende altid er den samme uanset hvilken udgave af Class1, der er load'et. How do I do that?
27. januar 2005 - 16:58
#5
Som jeg beskrev du laver et interface eller en abstrakt klasse og så laver du med Class forName newInstance et objekt af en ikke abstrakt klasse som implementerer/extender interface/abstrakt klasse.
28. januar 2005 - 17:19
#6
->arne_v: Tror jeg forstår det nu, smid lige et svar. Til min egen orientering: public abstract class AClass1 { public int i; public abstract int metode(); } public class Class1 extends AClass1 { public int metode() { return 1; } } public class Class2 extends AClass1 { public int metode() { return 2; } } public class Benyt_Class1 { public static void main(String[] args) throws Exception { String s; for (int i=0;i<10;i++) { if (Math.random()>0.5) { s="Class1"; } else { s="Class2"; } AClass1 c1 = (AClass1)(Class.forName(s).newInstance()); System.out.println(c1.metode()); } } }
28. januar 2005 - 17:23
#7
svar
Kurser inden for grundlæggende programmering