Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Enum estendibile

  1. #1

    Enum estendibile

    Salve a tutti, sto cercando un modo per estendere questo enumeratore che contiene gli elementi comuni di due classi (impiegato e cliente).L'obiettivo è quello di estendere l'enum per poi aggiungere i campi essenziali o di impiegato o di cliente.
    So che le enum non sono estendibili dal momento in cui estendono già da Enum.
    cosa mi consigliate di fare?
    codice:
    NOME("Nome",  x -> x.length() > 1), 
    		COGNOME("Cognome", x -> x.length() > 1),
    		CODICE_FISCALE("Codice fiscale", x -> x.length() == 15), 
    		INDIRIZZO("Indirizzo", x -> x.length() > 7), 
    		TELEFONO("Telefono", x -> isNumber(x)),
    		EMAIL("E-Mail", x -> Pattern.compile(EnumFieldsCommon.EMAIL_PATTERN).matcher(x).matches());

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da moneletizi Visualizza il messaggio
    Salve a tutti, sto cercando un modo per estendere questo enumeratore che contiene gli elementi comuni di due classi (impiegato e cliente).L'obiettivo è quello di estendere l'enum per poi aggiungere i campi essenziali o di impiegato o di cliente.
    Puoi chiarire meglio o descrivere di più lo scenario? Da quello che vedo, mi sembra che ciascuna costante ha un nome e ha una "funzione" predicato di test.


    Quote Originariamente inviata da moneletizi Visualizza il messaggio
    So che le enum non sono estendibili dal momento in cui estendono già da Enum.
    Una tua enum estende implicitamente java.lang.Enum. La tua enum non è a sua volta estendibile perché per le regole del linguaggio una enum è concettualmente/implicitamente "final" e quindi non può essere estesa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Puoi chiarire meglio o descrivere di più lo scenario? Da quello che vedo, mi sembra che ciascuna costante ha un nome e ha una "funzione" predicato di test.



    Una tua enum estende implicitamente java.lang.Enum. La tua enum non è a sua volta estendibile perché per le regole del linguaggio una enum è concettualmente/implicitamente "final" e quindi non può essere estesa.
    Il problema nasce perchè nel mio progetto vado a popolare l'intestazione delle colonne di una JTable con il pattern strategy, in base al parametro passato nel costruttore.
    Questo pannello può essere utile per impiegati o clienti.
    volendo riassumere i concetti di impiegato e cliente in una enum comune ho creato questa enum che comprende i campi che essi hanno in comune.
    codice:
    public class FieldsCommon implements IFormStrategy<String>{
    	
    	public static DefaultListModel<String> model = new DefaultListModel<>();
    	
    	public enum EnumFieldsCommon implements IFormField{
    		
    		NOME("Nome",  x -> x.length() > 1), 
    		COGNOME("Cognome", x -> x.length() > 1),
    		CODICE_FISCALE("Codice fiscale", x -> x.length() == 15), 
    		INDIRIZZO("Indirizzo", x -> x.length() > 7), 
    		TELEFONO("Telefono", x -> isNumber(x)),
    		EMAIL("E-Mail", x -> Pattern.compile(EnumFieldsCommon.EMAIL_PATTERN).matcher(x).matches()); 
    		
    		private static final String EMAIL_PATTERN = 
    				"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
    				+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    		
    		private String nomeCampo;
    		private Predicate<String> pred;
    		
    		private EnumFieldsCommon(final String nomeCampo, final Predicate<String> pred){
    			this.nomeCampo = nomeCampo;
    			this.pred = pred;
    		}
    
    
    		@Override
    		public String getField() {
    			return this.nomeCampo;
    		}
    		
    		@Override
    		public Predicate<String> getPred() {
    			return this.pred;
    		}
    		
    		private static boolean isNumber(String s){
            		try{
            			return Optional.ofNullable(new Integer(s)).isPresent();//ritrona true se � riuscito a convertirlo, altrimenti ritorna false
            		} catch (NumberFormatException e){
            			return false;
            		}
    		}
    	}
    
    
    	
    
    
    	@Override
    	public List<IFormField> getFields() {
    		return Arrays.asList(EnumFieldsCommon.values());
    	}
    }
    oltre a questi campi devo aggiungere per impiegati il campo salario e per i clienti il campo data scadenza.
    La soluzione che ho pensato è questa, con la pecca della duplicazione di codice per quanto riguarda l'enum.
    codice:
    public class EmployeeStrategy implements IFormStrategy{
    
    
        private FieldsCommon fieldsCommon;
        
        public EmployeeStrategy() {
            this.fieldsCommon=new FieldsCommon();
        }
        
        public enum EnumFieldsCommon implements IFormField{
            
            SALARIO("Salario", Optional.empty());
                    
            private String nomeCampo;
            private Optional<Predicate<String>> pred;
            
            private EnumFieldsCommon(final String nomeCampo, final Optional<Predicate<String>> pred){
                    this.nomeCampo = nomeCampo;
                    this.pred = pred;
            }
    
    
            @Override
            public String getField() {
                    return this.nomeCampo;
            }
            
            @Override
            public Optional<Predicate<String>> getPred() {
                    return this.pred;
            }
           
    }
        
        @Override
        public List<IFormField> getFields() {
            List<IFormField> list= fieldsCommon.getFields();
            list.addAll(Arrays.asList(EnumFieldsCommon.values()));
            return list;
        }
    
    
    }
    Spero di essere stato abbastanza chiaro, grazie per l'aiuto

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.