public class c1 {
private static c1 c = null ;
private c1( ) {
}
public static synchronized c1 getInstance( ) {
if( c == null ) {
c = new c1( ) ;
}
return c ;
}
public HashMap getHM( ) {
return aHMfromsomewhere ;
}
}
Mon problème est que ces diverses classes (c1,c2 etc...) possèdent
toutes la meme structure mais dans des packages diverses.
Je veux, par exemple, instancier c2 juste en connaisant son nom
(pack1.pack2.c2), je fait :
Class c = Class.forName( "pack1.pack2.c2" ) ;
et ensuite je suis dans le gaz:
- Si j'essaye de déclarer une interface avec getInstance et getHM
j'obtient un castexception
- Si j'essaye de faire un getMethod dur getInstance puis un invoke,
j'obtient un Object que je ne sais pas caster en Class: C'est à dire:
Class c = Class.forName( "pack1.pack2.c2" ) ;
Method m1 = ccrl.getMethod( "getInstance", null ) ;
Object o = m1.invoke( c, null ) ;
System.out.println( o ) ; // affiche: pack1.pack2.c2@12345
Class c2 = ( Class )o ; // <== cast exception (pourtant le print
précédant à une bonne tete...)
Method m2 = c2.getMethod( "getHM", null ) ;
C'est peut être à cause du lundi mais je suis un peu bloqué dans ma tete
la...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Tom
Salut à tous,
Class c2 = ( Class )o ; // <== cast exception (pourtant le print précédant à une bonne tete...)
Salut,
J'ai lu en diagonale, mais le ClassCastException me semble normal... tu convertis un objet en une classe... Il faut faire appel à la méthode getClass() pr récupérer son objet 'Class'...
Tom
Salut à tous,
Class c2 = ( Class )o ; // <== cast exception (pourtant le print
précédant à une bonne tete...)
Salut,
J'ai lu en diagonale, mais le ClassCastException me semble normal... tu
convertis un objet en une classe... Il faut faire appel à la méthode
getClass() pr récupérer son objet 'Class'...
Class c2 = ( Class )o ; // <== cast exception (pourtant le print précédant à une bonne tete...)
Salut,
J'ai lu en diagonale, mais le ClassCastException me semble normal... tu convertis un objet en une classe... Il faut faire appel à la méthode getClass() pr récupérer son objet 'Class'...
Tom
Frederic WOEHL
Je me repond à moi meme ! It was a little bit tricky...
Le bon code: Class c = Class.forName( "pack1.pack2.c2" ) ; Method m1 = ccrl.getMethod( "getInstance", null ) ; Object o = m1.invoke( c, null ) ; System.out.println( o ) ; Class c2 = ( Class )o.getClass( ) ; // bien mieux... Method m2 = c2.getMethod( "getHM", null ) ; m2.invoke( o, null ) ; // et surtout pas m2.invoke( c2, null )
FRED
Frederic WOEHL wrote:
Salut à tous,
J'ai plusieurs classes du type
public class c1 { private static c1 c = null ; private c1( ) { } public static synchronized c1 getInstance( ) { if( c == null ) { c = new c1( ) ; } return c ; } public HashMap getHM( ) { return aHMfromsomewhere ; } }
Mon problème est que ces diverses classes (c1,c2 etc...) possèdent toutes la meme structure mais dans des packages diverses. Je veux, par exemple, instancier c2 juste en connaisant son nom (pack1.pack2.c2), je fait :
Class c = Class.forName( "pack1.pack2.c2" ) ;
et ensuite je suis dans le gaz: - Si j'essaye de déclarer une interface avec getInstance et getHM j'obtient un castexception - Si j'essaye de faire un getMethod dur getInstance puis un invoke, j'obtient un Object que je ne sais pas caster en Class: C'est à dire: Class c = Class.forName( "pack1.pack2.c2" ) ; Method m1 = ccrl.getMethod( "getInstance", null ) ; Object o = m1.invoke( c, null ) ; System.out.println( o ) ; // affiche: Class c2 = ( Class )o ; // <== cast exception (pourtant le print précédant à une bonne tete...) Method m2 = c2.getMethod( "getHM", null ) ;
C'est peut être à cause du lundi mais je suis un peu bloqué dans ma tete la...
Merci d'avance pour vos réponses, FRED
Je me repond à moi meme !
It was a little bit tricky...
Le bon code:
Class c = Class.forName( "pack1.pack2.c2" ) ;
Method m1 = ccrl.getMethod( "getInstance", null ) ;
Object o = m1.invoke( c, null ) ;
System.out.println( o ) ;
Class c2 = ( Class )o.getClass( ) ; // bien mieux...
Method m2 = c2.getMethod( "getHM", null ) ;
m2.invoke( o, null ) ; // et surtout pas m2.invoke( c2, null )
FRED
Frederic WOEHL wrote:
Salut à tous,
J'ai plusieurs classes du type
public class c1 {
private static c1 c = null ;
private c1( ) {
}
public static synchronized c1 getInstance( ) {
if( c == null ) {
c = new c1( ) ;
}
return c ;
}
public HashMap getHM( ) {
return aHMfromsomewhere ;
}
}
Mon problème est que ces diverses classes (c1,c2 etc...) possèdent
toutes la meme structure mais dans des packages diverses.
Je veux, par exemple, instancier c2 juste en connaisant son nom
(pack1.pack2.c2), je fait :
Class c = Class.forName( "pack1.pack2.c2" ) ;
et ensuite je suis dans le gaz:
- Si j'essaye de déclarer une interface avec getInstance et getHM
j'obtient un castexception
- Si j'essaye de faire un getMethod dur getInstance puis un invoke,
j'obtient un Object que je ne sais pas caster en Class: C'est à dire:
Class c = Class.forName( "pack1.pack2.c2" ) ;
Method m1 = ccrl.getMethod( "getInstance", null ) ;
Object o = m1.invoke( c, null ) ;
System.out.println( o ) ; // affiche: pack1.pack2.c2@12345
Class c2 = ( Class )o ; // <== cast exception (pourtant le print
précédant à une bonne tete...)
Method m2 = c2.getMethod( "getHM", null ) ;
C'est peut être à cause du lundi mais je suis un peu bloqué dans ma tete
la...
Je me repond à moi meme ! It was a little bit tricky...
Le bon code: Class c = Class.forName( "pack1.pack2.c2" ) ; Method m1 = ccrl.getMethod( "getInstance", null ) ; Object o = m1.invoke( c, null ) ; System.out.println( o ) ; Class c2 = ( Class )o.getClass( ) ; // bien mieux... Method m2 = c2.getMethod( "getHM", null ) ; m2.invoke( o, null ) ; // et surtout pas m2.invoke( c2, null )
FRED
Frederic WOEHL wrote:
Salut à tous,
J'ai plusieurs classes du type
public class c1 { private static c1 c = null ; private c1( ) { } public static synchronized c1 getInstance( ) { if( c == null ) { c = new c1( ) ; } return c ; } public HashMap getHM( ) { return aHMfromsomewhere ; } }
Mon problème est que ces diverses classes (c1,c2 etc...) possèdent toutes la meme structure mais dans des packages diverses. Je veux, par exemple, instancier c2 juste en connaisant son nom (pack1.pack2.c2), je fait :
Class c = Class.forName( "pack1.pack2.c2" ) ;
et ensuite je suis dans le gaz: - Si j'essaye de déclarer une interface avec getInstance et getHM j'obtient un castexception - Si j'essaye de faire un getMethod dur getInstance puis un invoke, j'obtient un Object que je ne sais pas caster en Class: C'est à dire: Class c = Class.forName( "pack1.pack2.c2" ) ; Method m1 = ccrl.getMethod( "getInstance", null ) ; Object o = m1.invoke( c, null ) ; System.out.println( o ) ; // affiche: Class c2 = ( Class )o ; // <== cast exception (pourtant le print précédant à une bonne tete...) Method m2 = c2.getMethod( "getHM", null ) ;
C'est peut être à cause du lundi mais je suis un peu bloqué dans ma tete la...