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

    Alcuni dubbi sul Factory Method

    Salve,

    vedendo un semplice esempio di Factory Method mi è sorto un dubbio su una particolarità implementativa, ovvero la necessità dell'upcasting, nella classe creazione concreta dell'oggetto concreto nella sua super-classe astratta...mi spiego meglio con un esempio:

    AbstractObject :
    Codice PHP:
    public interface AbstractObject {
        public 
    void aMethod();

    ConcreteObject1 :
    Codice PHP:
    public class ConcreteObject1 implements AbstractObject {
        public 
    void aMethod() {
            
    System.out.println("aMethod di ConcreteObject");
        }

    Creator :
    Codice PHP:
    public abstract class Creator {
        abstract 
    AbstractObject createObject();
        
    void doSomething() {
            
    AbstractObject ao createObject();
            
    ao.aMethod();
        }

    Creator1 :
    Codice PHP:
    public class Creator1 extends Creator {
        @
    Override
        AbstractObject createObject
    () {
            return (
    AbstractObject) new ConcreteObject1();
        }

    Test :
    Codice PHP:
    public class Test {
        public static 
    void main(String[] args) {
            
    Creator c = new Creator1();
            
    c.doSomething();
        }

    L'upcasting in Creator1 è proprio necessario? A me sembra funzioni tutto anche se lo levo...

    Grazie dell'attenzione,

    Matteo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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

    Re: Alcuni dubbi sul Factory Method

    Originariamente inviato da matthew80
    L'upcasting in Creator1 è proprio necessario? A me sembra funzioni tutto anche se lo levo...
    Un up-cast di un reference non crea mai problemi e non è obbligatorio farlo esplicitamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Anzitutto Andbin grazie della risposta.

    Quindi è un po come dire :

    "siccome il metodo createObject() della classe Creator1 restuisce un oggetto ConcreteObject1 che è un AbstractObject, in maniera implicita questo oggetto verrà "promosso" a tipo AbstractObject. Il fatto che nel codice io abbia scritto in maniera esplicita questo upcating è solo una questione di stile, nel senso che sia che esplicito l'upcasting sia che non lo esplicito a livello di codice, cmq il compilatore mi farà questo upcasting in maniera implicita. I problemi semmai possono nascere nel casting inverso, in quanto ci potrebbe essere una perdita di informazioni".

    Giusto?
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da matthew80
    Giusto?
    Sì. Per essere più precisi è bene dire che un down-cast sui tipi reference non fa "perdere" informazioni. Nel senso che non vengono eliminate informazioni o troncati dei valori. Un down-cast sui reference è controllato a runtime. Se il controllo è ok, bene. Altrimenti viene lanciato ClassCastException.

    Per i tipi primitivi invece un down-cast può far perdere la "magnitudo" del valore e può anche far perdere la precisione e far cambiare il segno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.