Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problemi generici...

  1. #1

    Problemi generici...

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

    l'esercizio mi passa un interfaccia generica :

    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...:
    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:


    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
    scusate invece di metterlo nella sezione java l'ho scritto quì...potete cancellarlo che lo riapro nella giusta sezione,perdonatemi ma sono pure le 3 della notte e ancora studio ^^

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Originariamente inviato da valerik87
    scusate invece di metterlo nella sezione java l'ho scritto quì...potete cancellarlo che lo riapro nella giusta sezione,perdonatemi ma sono pure le 3 della notte e ancora studio ^^
    In genere, le discussioni si spostano se si trovano in una sezione errata, non si duplicano.
    Passo e chiudo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.