2009-10-31 11 views
0

J'essaie d'utiliser des types génériques pour la première fois en Java, car je veux seulement que mon constructeur accepte les classes qui implémentent l'interface "Anealable". theres un problème avec mon code par la seule erreur que je reçois est « début illégale de type » qui ne reçoit pas très loin d'essayer de le faire fonctionnerProblème inconnu avec Java Generics

ici est le code de ma classe

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

    public Crystal(<? implements Anealable> a) 
    { 
     this.a = a; 
    } 

} 
+1

@Gwilym - ce commentaire est hors sujet, mais c'est généralement une mauvaise idée d'étendre Thread. Il serait probablement préférable de déclarer Crystal comme implémentant Runnable, puis de l'exécuter à l'aide d'un objet Thread distinct. De cette façon, vous avez la possibilité de faire du pool de threads, par exemple. –

Répondre

6

Pourquoi ne pas simplement passer dans le constructeur le type Anealable comme ceci:

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

    public Crystal(Anealable a) 
    { 
     this.a = a; 
    } 

} 
+0

Cela signifie-t-il que construtor acceptera désormais uniquement les classes qui implémentent l'interface Anealable? – Gwilym

+0

ok juste eu un jeu avec mon code et cela semble fonctionner. merci – Gwilym

3

Je suppose que vous voulez paramétrer la classe. Si oui, alors:

public class Crystal<T extends Anealable> extends Thread { 
    Object a; 

    public Crystal(T a) { 
    this.a = a; 
    } 
} 

Alternativement, peuvent être paramétrées méthodes (y compris les constructeurs) comme ceci:

public class Crystal extends Thread { 
    public <T extends Anealable> Crystal(T t) { 
    // do stuff with T 
    } 
} 

Il est difficile de déterminer ce que votre intention est donc je ne peux pas vraiment sur qui conviendra à votre Besoins.

+0

Vous pouvez aussi paramétrer les constructeurs. – erickson