Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [java] approccio con un appello di generici HELP

    salve questo è il mio post e lo uso per quello che è l'argomento bello ostico dei generici...

    l'esercizio mi passa un interfaccia generica :

    Citazione:
    public interface Insieme<T extends Comparable<? super T>> extends Iterable<T>{
    boolean vuoto();
    boolean pieno();
    boolean aggiungi(T x);
    boolean rimuovi(T x);
    boolean appartiene(T x);
    boolean sottinsieme(Insieme<T> y);
    Insieme<T> unione(Insieme<T> y);
    Insieme<T> intersezione(Insieme<T> y);
    Insieme<T> differenza(Insieme<T> y);
    Insieme<T> differenzaSimmetrica(Insieme<T> y);
    }



    devo scrivere un metodo InsiemeAstratto e fornisce concretizzazione per quanti più metodi possibili(poi dovrò scrivere una classe concreta InsiemeHashSet)

    comincio a scrivere la classe astratta e decido quali metodi concretizzare e non...:
    Citazione:
    public abstract class InsiemeAstratto<T> implements Insieme{
    public abstract boolean vuoto();
    public abstract boolean pieno();
    public abstract boolean aggiungi(T o);
    public abstract boolean rimuovi(T o);
    public abstract boolean appartiene(T o);
    public abstract boolean sottoinsieme(T o);
    public abstract Insieme<T> creaInsieme();
    public abstract T[] elementi(T x);
    public abstract int compareTo(T o);


    devo concretizzare gli ultimi 4 metodi dell'interfaccia.

    quelli in rosso sono metodi che aggiungo io per semplificarmi la vita...
    fin quì ci sono errori??? in teoria i metodi astratti con parametro T li concretizzo più avanti,e quindi li lascio così, invece gli altri 3 dovrebbero essere(sempre da concretizzare in seguito):
    1) crea un oggetto insieme<t> da utilizzare poi negli altri metodi.
    2) trasforma la collections generica x di tipo T in un array di tipo T
    3) il compare to applicato ad un oggetto di tipo T.

    ora vado a scrivere la classe unione per concretizzarla...prende un insieme<T> e unito ad un altro insieme, ne ritorna uno nuovo, quindi scrivo:


    Citazione:
    public Insieme<T> unione(Insieme<T> i){
    Insieme<T> nuovo = creaInsieme();
    return nuovo;
    }


    il metodo praticamente nn fa nessuna operazione in realtà vorrei prima vedere se scrivo bene il codice ed infatti mi da un errore:

    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:12: type parameter T is not within its bound
    public abstract Insieme<T> creaInsieme();
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:16: type parameter T is not within its bound
    public Insieme<T> unione(Insieme<T> i){
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:16: type parameter T is not within its bound
    public Insieme<T> unione(Insieme<T> i){
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:17: type parameter T is not within its bound
    Insieme<T> nuovo = creaInsieme();


    mi dice che il parametro T è senza il suo limite...se ci aggiungo Comparable mi da però una 15 di errori...

    se invece di T scrivo <? super T> mi da questo errore:
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:4: name clash: unione(poo.ProveAppelli.Appello17_4_07.Insieme<? super T> ) in poo.ProveAppelli.Appello17_4_07.InsiemeAstratto<T> and unione(poo.ProveAppelli.Appello17_4_07.Insieme<T> ) in poo.ProveAppelli.Appello17_4_07.Insieme have the same erasure, yet neither overrides the other
    public abstract class InsiemeAstratto<T> implements Insieme{
    ^
    che in verità sarebbe proprio ciò che voglio,fare un overide del metodo dell'interfaccia usando i generici...come risolvo???

  2. #2
    Citazione:
    public Insieme<T> unione(Insieme<T> i){
    Insieme<T> nuovo = creaInsieme();
    return nuovo;
    }

    sono sempre più dell'idea che la soluzione sia quà, ma nn capisco perchè mi dia questo problema:

    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:12: type parameter T is not within its bound
    public abstract Insieme<T> creaInsieme();
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:16: type parameter T is not within its bound
    public Insieme<T> unione(Insieme<T> i){
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:16: type parameter T is not within its bound
    public Insieme<T> unione(Insieme<T> i){
    ^
    D:\java\poo\ProveAppelli\Appello17_4_07\InsiemeAst ratto.java:17: type parameter T is not within its bound
    Insieme<T> nuovo = creaInsieme();


    ma nn riesco a capire xkè richieda il suo limite....

  3. #3
    uppo un poco

  4. #4
    uppo ancora una volta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.