instanceof in Generic

guguli

Bekanntes Mitglied
Hallo zusammen,

ich hab das folgende Problem:
ich möchte den Typ einer Variablen Vergleichen.
die Classe Sieht wie folgt aus:

Java:
public abstract class A <T extends CTSClass> extends Ab<T>{
private Class<T> mT;
public A( Class<T> t) {
  super(t);
  this.mT = t;
  }

@Override
  public void run() {
// hier würde ich gerne eigentlich mit instanceOf schauen ob mT vom Type CTSClass ist so:

if(mT instanceOf CTSClass){....}
}
Das geht aber nicht. ICh hab etwas gegoogelt und hab raus gefunden dass ich mit isAssignableFrom das raus finden kann.
Weiss jedoch nicht wie das funktioniert. Kann mir einer dabei helfen??


THX
 
Zuletzt bearbeitet von einem Moderator:
Hi,

Laut dem Link muss ich sowas schreiben!

CTSClass.class.isAssignableFrom(mTargetClass.getClass());

also wenn ich debugge dann ist mTargetClass vom Typ CTSClass.
Jedoch kriege ich false als antwort.

Woran kann das liegen???

Gruß
 
Hallo,
das alles hat mir bis jetzt nicht geholfen. Ich poste am Besten meine Classenhierarchie.
Java:
public abstract class Abs1 <T extends ITsClass>extends SelectionAction {
   public Abs1(AbstractTSEditor editor, Class<T> targetClass, String commandLabel) {
     super(editor);
   }
}

public abstract class Abs2<T extends ITsClass> extends Abs1<T> {
   private Class<T> mTargetclass;
   private AbstractTSEditor mEditor;
   private CreateSpecialCommand mCreateSpecialCommand;

   public Abs2(AbstractTSEditor editor, Class<T> targetClass, String commandLabel) {
     super(editor, targetClass, commandLabel);
     this.mTargetclass = targetClass;
     this.mEditor = editor;
   }

   @Override
   public void run() {
     if(mTargetclass.getClass().isAssignableFrom(CTSClass.class)){
       mCreateSpecialCommand = new CreateSpecialCommand(tSelectedSet, entryActivity, exitActivity, CTS.class, mEditor, "NewCts"); //$NON-NLS-1$
     }
     if(mTargetclass.getClass().isAssignableFrom(ScriptClass.class)){
       mCreateSpecialCommand = new CreateSpecialCommand(tSelectedSet, entryActivity, exitActivity, CTS.class, mEditor, "NewCts"); //$NON-NLS-1$
     }
   }
}

public class ExtractCtsAction extends Abs2<CTSClass> {
   public ExtractCtsAction(AbstractTSEditor editor) {
     super(editor, CTSClass.class, Messages.ExtractCtsAction_ACTION_TXT);
   }
}

public class ExtractScriptAction extends Abs2<ScriptClass> {
   public ExtractScriptAction(AbstractTSEditor editor) {
     super(editor, ScriptClass.class, Messages.ExtractScriptAction_ACTION_TXT);
   }
}

das ist meine Klassen Hierarchie, und wenn ich in der Methode run(), diese if abfrage:
if(mTargetclass.getClass().isAssignableFrom(CTSClass.class))
machen möchte dann kriege ich false zurück, obwohl mTargetclass vom Type CTSClass ist.
CIh hab das beim Debugging kontrolliert.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
OFFTOPIC: Bei den Code-Tags keine Leerzeichen nach den [ Klammern. Oben steht es nur mit Leerzeichen, da sonst automatisch umgewandelt wird 😉
 
Deine Variable 'mTargetclass' ist schon dein Class-Object, welches z.b. die Klasse CTSClass repräsentiert. Wenn du davon die Methode 'getClass()' aufrufst, bekommst du den Typ der Variablen 'mTargetclass' zurück. Das ist dann das Class-Object, welches die Standard-Java-Klasse Class repräsentiert. Lass also einfach das 'getClass()' weg: 'mTargetclass.isAssignableFrom(...)'

lg Kevin
 

Zurück
Oben