2013-05-13 3 views
0

Je pensais avoir compris comment utiliser .class et Class<> mais je suppose que non. Le super(ApprovalWorkstation.class ci-dessous n'est pas mappé au constructeur. Comment puis-je être sûr que je passe une référence de classe pour que la base WorkstationRequest puisse l'instancier?Comment instancier une classe générique

public class ApprovalWorkstation extends Workstation { 

    public ApprovalWorkstation(WorkstationEntity entity) { 
     super(entity); 
    } 
} 

public class WorkstationRequest extends com.production.socket.request.WorkstationRequest { 
    public WorkstationRequest() { 
     super(ApprovalWorkstation.class); //unable to map to constructor 
    } 
} 

Ceci est la base WorkstationRequest qui est étendue au-dessus

public class WorkstationRequest { 
    private Class<Workstation> workstationClass; 

    public void WorkstationRequest(Class<Workstation> workstationClass) { 
     this.workstationClass = workstationClass; 
    } 

mise à jour

Je suis désolé pour la confusion, mon constructeur a fait Class<Workstation> et non Workstation comme je l'avais d'abord.

+1

'Workstation' et' classe 'ne sont pas les mêmes. Ce n'est pas clair ce que vous essayez de faire. –

+1

le dernier morceau de code est erroné, vous ne pouvez pas affecter l'instance 'Workstation' à la variable' Class '. – hoaz

+0

Pourriez-vous passer dans un objet et obtenir la classe de cela? – christopher

Répondre

4

Afin de pouvoir passer à la fois Workstation classe et ses classes d'enfants, vous devez changer la définition de WorkstationRequest à ce qui suit:

public class WorkstationRequest { 
    private Class<? extends Workstation> workstationClass; 

    public WorkstationRequest(Class<? extends Workstation> workstationClass) { 
     this.workstationClass = workstationClass; 
    } 
} 
+0

Alors que j'avais besoin? extends', j'ai aussi eu une valeur de retour de 'void' ce qui signifiait que ce n'était pas un constructeur – Webnet

+0

oups, copier coller des roches. fixé – hoaz

0

Corrigez-moi si je me trompe, mais que vous passez dans une instance Workstation alors que ce qui est nécessaire est un Class<Workstation>. Peut-être utiliser workstationClass.getClass() à la place?

0

Vous essayez d'affecter une instance de Worstation au champ de type Class<Workstation>, ce qui n'est évidemment pas la même chose.

Qu'est-ce que vous êtes probablement essayer de faire est:

public WorkstationRequest(Class<Workstation> workstationClass) { 

Bien sûr, il n'y a pas de type de retour (void) dans les constructeurs. Votre "constructeur" est tout simplement une méthode:

public void WorkstationRequest(Class<Workstation> workstationClass) { // method 
public  WorkstationRequest(Class<Workstation> workstationClass) { // constructor 
+0

tirer, je suis désolé ... 'Class ' est ce que j'ai. Je jouais avec d'autres choses en essayant de le faire fonctionner. – Webnet

0
  1. Il n'y a pas de constructeur qui prend un Class comme paramètre dans la classe de base WorkstationRequest.
  2. Les constructeurs n'ont pas de type de retour. Par conséquent, public void WorkstationRequest doit être remplacé par public WorkstationRequest.
Questions connexes