Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313

    [JAVA] Static e classe parametrica

    Salve.

    Ho una classe astratta :
    codice:
    public abstract class SimSender<E> extends Thread{
        /** The instance of this object */
        protected static SimSender<E> instance = null;
    
        public SimSender(Socket aSocket, SimQueueSender<E> aSimQueueSender){
         if (aSocket != null) {
                       this.skt = aSocket;
                      this.txQueue = aSimQueueSender;
    	               this.dataOutStream = new DataOutputStream(skt.getOutputStream());
                     }
    	}
        
        
    .   public static SimSender<E> getInstance(){
           return instance;
    
       }
         public abstract void sendMessage(E message) throws IOException;
     }
    Questa è ereditata da:
    codice:
    public class SimSenderByte<E> extends SimSender<E> {
    	
    	public SimSenderByte(Socket aSocket, SimQueueSender<E> aSimQueueSender){
    		super(aSocket,aSimQueueSender);
    	}
    
    public static SimSender getInstance(Socket aSocket, SimQueueSender<E> aSimQueueSender)) {
    
            if (instance == null) {
    
                synchronized (SimSenderByte.class) {
    
                    if (instance == null) {
    
                        instance = new SimSenderByte(aSocket,aSimQueueSender);
    
                    }
    
                }
    
            }
    
            return instance;
    
        }
    	 
    	
    	@Override
    	public void sendMessage(Object message) throws IOException {
    		// TODO Auto-generated method stub
    		
    	}
    }
    Cioè vorrei implementare il pattern singleton per la classe SimSenderByte. Ma perchè dà errore???

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Static e classe parametrica

    Originariamente inviato da tcc
    codice:
    public abstract class SimSender<E> extends Thread{
        protected static SimSender<E> instance = null;
    
       public static SimSender<E> getInstance(){
           return instance;
    I tipi parametrici di una classe (quel E nel caso di SimSender sopra) non possono essere usati in membri statici della classe. Per via della ben nota "erasure", la classe a runtime è sempre una sola. Pertanto tutte le istanziazioni con tipi parametrici differenti es. new SimSender<String>(....) o new SimSender<Integer>(....) o altro, condividerebbero la stessa identica classe e quindi i membri statici sono "condivisi".
    Pertanto, ne consegue che non ha senso usare un tipo parametrico della classe in membri statici .... visto che sono "unici".

    È così ... non ci puoi fare niente. Punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.