2009-11-30 8 views
-1

J'ai juste une question rapide sur le type générique. i ont une classe d'interfaceJava Generic Type question

public interface myInterface<T> { 
    T add(); 
} 

et une classe sous

public class interfaceImp<T> implements myInterface 
{ 
    private T t1; 
    private T t2; 

    interfaceImp(T t1, T t2){ 
     this.t1 = t1; 
     this.t2 = t2; 

    } 

    public Object add() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

Cependant, je n'ai aucune idée sur la façon de mettre en œuvre add(). dois-je vérifier les points suivants

1. t1.getClass() == Integer.class&&t2.getClass() == Integer.class</br> 
2. t1.getClass() != Integer.class&&t2.getClass() == Integer.class</br> 
3. t1.getClass() == Integer.class&&t2.getClass() != Integer.class</br> 

f Puis cas T1 ou T2 du type approprié? Ou il y a une meilleure façon de le faire? merci !!

+0

Que devrait faire votre méthode add()? –

+1

Je prendrais du recul et j'élaborerais l'exigence fonctionnelle pour laquelle vous pensez que c'est la «solution». – BalusC

+1

Ceci est probablement une question de travail à propos des génériques, la "solution" est de travailler comment ils fonctionnent. – Chris

Répondre

1

Désolé d'être si critique, mais il est presque impossible de comprendre ce que vous essayez de faire ici. Mais pour commencer,

public interface MyInterface<T> 
    T add(); 
} 

public class InterfaceImp implements MyInterface<Date> { // Or whatever class you want 
    private Date t1; 
    private Date t2; 

    interfaceImp(Date t1, Date t2){ 
    this.t1 = t1; 
    this.t2 = t2; 
    } 

    public Date add() { 
    throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 
+0

ressemble à vous mis à jour votre question. Nous avons toujours besoin de savoir ce que vous voulez faire avec add(). – Mike

+0

Ce que je fais essaye d'apprendre quelques techniques de génériques en écrivant une application de calculatrice, donc add() ajoute deux nombres ensemble. La calculatrice aura certaines fonctions de base, telles que +, -, *, /. La calculatrice est également capable de faire quelques exemples de calculs de cryptographie, tels que GCD de deux entiers. Peut-être que l'application Calculatrice n'est pas un bon exemple pour apprendre les génériques car les opérations de base (+, -, *, /) peuvent être facilement réalisées sans utiliser de génériques. – user200340

1

Je pense que tout d'abord vous devez comprendre ce que fait votre méthode add.

Cela dit, que se passe-t-il si deux chaînes sont passées? Que faire si une chaîne et un entier sont passés?
Puisque par le contrat vous renvoyez un T que retournerez-vous si deux objets "non-admettables" sont passés?

Vous essayez de voir si t1 et t2 sont des entiers mais s'ils sont toujours des entiers, pourquoi le besoin de génériques?

BTW, pour savoir si, par exemple, t1 est un nombre entier ou non, je l'aurais fait:

if(t1 instanceof Integer){ 
    //do something 
} 

Juste un petit conseil: essayez de ne pas utiliser les noms de classes qui commencent par une plus faible lettre de cas.

+0

Merci pour ce "Juste un petit conseil: essayez de ne pas utiliser les noms de classe qui commencent par une lettre minuscule." – user200340

0

Ce n'est pas du tout la façon dont les génériques sont supposés être utilisés. Vous ne pouvez pas vérifier si T est un entier, ce n'est pas ce que dit la classe. Ce qu'il dit actuellement est qu'il peut être défini comme tout type de classe, et ajoutera ensuite les deux ensemble, si elle ne fonctionnait avec ints il serait

interfaceImp(Integer t1, Integer t2) 

qui est évidemment inutile que Entiers peut être facilement ajoutée. À la place, une interface fournit une méthode d'ajout, assurez-vous que les types que prend votre classe implémente cette interface, puis vous pouvez utiliser la méthode add.

Qu'est-ce que votre classe fait, mais sous forme de méthode (pour vous faire faire un travail pour la réponse aux devoirs c'est)

public <? implements myInterface> addTheseItems (<? implements myInterface> first, 
               <? implements myInterface> second) { 
     return first.add(second); 
} 

Vous devez informer le compilateur que les types fournis implémentent l'interface ou vous avez gagné Vous n'avez pas accès à la méthode d'ajout dont vous avez besoin.