Maison  >  Questions et réponses  >  le corps du texte

Problèmes de compilation avec les génériques Java

Le code source est le suivant et passe à l'invite ci-dessous. Ce code ne peut évidemment pas être compilé

.

Je pense qu'une des raisons est

 BoundedEcho<String> stringEcho = new BoundedEcho<String>();

La String ici ne peut pas hériter de Number. Ce n'est pas une sous-classe de String. Est-ce correct ?

Ensuite, une autre question est la suivante : j'ai transmis un objet new BoundedEcho<Integer> dans le dernier paragraphe, et il appartient à BoundedEcho<T>, pourquoi une erreur est-elle signalée ici ?

Est-ce que BoundedEcho改为public class BoundedEcho<? extends Number> {...} a raison ?

Le code source est ici

public class BoundedEcho<T extends Number> {

    public T echo(T value) {
        return value;
    }

    public BoundedEcho<T> echo(BoundedEcho<T> value) {
        return value;
    }
}
public class BoundedEchoChamber{
    public static void main(String[] args) {
        BoundedEcho<Number> numberEcho = new BoundedEcho<Number>();
        numberEcho.echo(10);
        numberEcho.echo(10d);
        numberEcho.echo(10f);
        numberEcho.echo(10L);
    
        BoundedEcho<String> stringEcho = new BoundedEcho<String>();
        
        numberEcho.echo(new BoundedEcho<Integer>());
        numberEcho.echo(new BoundedEcho<Double>());
        numberEcho.echo(new BoundedEcho<Float>());
        numberEcho.echo(new BoundedEcho<Long>());
    }
}
世界只因有你世界只因有你2687 Il y a quelques jours475

répondre à tous(1)je répondrai

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-17 10:05:13

    Le problème réside dans ces deux phrases

    public BoundedEcho<T> echo(BoundedEcho<T> value) {
            return value;
        }
        
    BoundedEcho<Number> numberEcho = new BoundedEcho<Number>();

    Lors de l'instanciation, vous déclarez T comme numéro et les appels suivants doivent être BoundedEcho<Number>. La raison en est que les types tels que BoundedEcho<Integer> et BoundedEcho<Number> sont des classes différentes et qu'il n'y a pas de relation d'héritage.

    répondre
    0
  • Annulerrépondre