2008-10-02 6 views
1

J'ai besoin d'obtenir la classe d'un objet à l'exécution.Comment obtenez-vous la classe d'une classe abstraite (Object) dans JavaME?

Pour une classe non abstraite que je pouvais faire quelque chose comme:

public class MyNoneAbstract{ 
    public static Class MYNONEABSTRACT_CLASS = new MyNoneAbstract().getClass(); 

Mais pour une classe abstraite cela ne fonctionne pas (me donne toujours Object)

public abstract class MyAbstract{ 
    public static Class MYABSTRACT_CLASS = MyAbstract.class.getClass(); 

Ce code sera en cours d'exécution dans les environnements JavaME.

Répondre

3

Vous avez juste besoin

MyAbstract.class 

Cette expression renvoie l'objet de classe représentant MyAbstract.

+2

Il sera sur CLDC1.1, mais pas sur CLDC1.0 :: http://blog.javia.org/java-class -literal-on-cldc/ – funkybro

0

Le code que vous voulez dans le cas abstrait est:

public abstract class MyAbstract{ 
    public static Class MYABSTRACT_CLASS = MyAbstract.class; 
} 

même si personnellement je ne voudrais pas déranger la définition des MyAbstract.class constants et juste utilisés tout au long.

Je m'attendais à ce que le code que vous avez écrit retourne la classe 'Class', pas la classe 'Object'.

+0

Je me suis mal expliqué. Je dois retourner la classe d'une classe auxiliaire connexe et la variable statique est simplement pour la commodité Un grand merci pour votre réponse –

0

Je pense que plus d'informations sont requises ici. En Java, une classe abstraite ne peut pas être instanciée. Cela signifie qu'un objet au moment de l'exécution ne peut pas avoir une classe abstraite. Il devrait être une sous-classe qui implémente toutes les méthodes abstraites. Dans JavaME, Object.getClass() devrait être tout ce dont vous avez besoin. Essayez-vous en quelque sorte de reconstituer votre hiérarchie de classes lors de l'exécution?

Dans ce cas, vous pourriez mettre en œuvre quelque chose comme ceci:

public String getClassHierarchy() { 
    return super.getClassHierarchy() + ".MyAbstract"; 
} 
Questions connexes