/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Oprette et vilkårligt object...
Fra : Jens Lykke Brandt


Dato : 13-01-01 18:42

Hejsa.

Dette virker fint: Jeg har en superklasse, som jeg opretter og afhængigt af
hvilke data der er i min database, så bliver den til en bestemt underklasse:
filterSuper dummy;
if ( resultSet.getString( 1 ).equals("SimpleReplace") ){
dummy = new SimpleReplace();
} else {
dummy = new Replace();
}
dummy.loadData( resultSet.getInt(2), connection );
str = dummy.applyFilter ( str );


Men det jeg gerne vil er noget i retning af følgende - så jeg undgår
if-sætningen (og derfor tilføje flere underklasser uden at skulle ind og
rode med if-sætningen):
filterSuper dummy;
dummy = new resultSet.getString( 1 )();
dummy.loadData( resultSet.getInt(2), connection );
str = dummy.applyFilter ( str );

En form for "eval" eller lignende...

Hvad skal jeg gøre?

Med venlig hilsen
Jens



 
 
Ulrik Magnusson (13-01-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 13-01-01 19:38

> Dette virker fint: Jeg har en superklasse, som jeg opretter og afhængigt af
> hvilke data der er i min database, så bliver den til en bestemt underklasse:
> filterSuper dummy;
> if ( resultSet.getString( 1 ).equals("SimpleReplace") ){
> dummy = new SimpleReplace();
> } else {
> dummy = new Replace();
> }
> dummy.loadData( resultSet.getInt(2), connection );
> str = dummy.applyFilter ( str );
>
> Men det jeg gerne vil er noget i retning af følgende - så jeg undgår
> if-sætningen (og derfor tilføje flere underklasser uden at skulle ind og
> rode med if-sætningen):

Du kan evt. bruge reflection:

import java.lang.reflect.*;

public class Test
{
//Opretter enten et String eller et Object objekt og skriver klassenavnet ud

public static void main( String[] args ) throws Exception
{
String[] classNames = {"java.lang.String","java.lang.Object"};
int r = (int)(Math.random() * 2);
Class cl = Class.forName(classNames[r]);
Constructor constructor = cl.getConstructor(null);
Object obj = constructor.newInstance(null);
System.out.println(obj.getClass());
}
}

Læg dog mærke til at der er et væld af Exceptions der skal tages højde for.
null betyder at det er default konstruktoren (0 argumenter) man vil have fat i.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste