Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Taoharcos

    aktív tag

    válasz Karma #3535 üzenetére

    Ez jó téma és nagyon jó válasz. Ezt én se értettem, csak szégyelltem megkérdezni.

  • modder

    aktív tag

    válasz Karma #3535 üzenetére

    Karma írta: "A lényeg az, hogy milyen szolgáltatást nyújt, nem az, hogy konkrétan hogyan oldja meg."

    Igazából ez a legfontosabb dolog. Amit még hozzá tennék, hogy kontextusfüggő vagy scope függő, hogy a statikus típusa a változónak Map vagy TreeMap legyen-e.

    Amikor az osztályod (osztályaid) külső interfészét tervezed meg, akkor a hívó kliens kódnak nem kell tudnia hogy milyen konkrét implementációt (TreeMap vagy HashTable) ad vissza az osztályod egy függvénye, csak azt, hogy a visszaadot érték Map tulajdonságú.

    De az osztályon belül fontos lehet, hogy konkrét típust deklarálj. Például egy JSON feldolgozó osztályt csinálsz, és szeretnéd, ha a hívó kliens egyszerűen egy OutputStreambe tudja írni a feldolgozandó JSON stringet. Neked azonban kell egy módszer a JSON feldolgozó osztályban, amivel ki tudod nyerni az OutputStreambe írt adatot. Az OutputStream interfészben nincsen deklarálva semmilyen metódus, amivel adatot ki tudnál nyerni (nem is arra való). De a ByteArrayOutputStreamben vissza tudod kérni a beírt adatot byte[] tömbként.

    Konkrét példa:

    public class MyJsonParser {
    private ByteArrayOutputStream jsonByteStream = new ByteArrayOutputStream();

    public OutputStream getOutputStream() {
    return (OutputStream) jsonByteStream;
    }

    public JsonObject parse() {
    // fontos tudni hogy ez egy ByteArrayOutputStream hogy használhassuk a toByteArray() metódusát
    byte[] jsonBytes = jsonByteStream.toByteArray();
    JsonObject jObject = new JsonObject();
    // parszoljuk a json stringet
    return jObject;
    }
    }

    public class Application {
    public static void main(String[] argv) {
    MyJsonParser parser = new MyJsonParser();

    // kit érdekel a konkrét implementációja az OutputStreamnek én csak írni akarok bele?
    OutputStream parserOutputStream = parser.getOutputStream();
    parserOutputStream.write( argv[0].getBytes() );

    JsonObject jObject = parser.parse();
    }
    }

    Ezt csak azért írtam le, mert nem örök igazság, hogy csak interfész típust deklarálunk. :)

  • pvt.peter

    őstag

    válasz Karma #3535 üzenetére

    Értem.
    Én is hasonlóra gondoltam, csak kicsit hétköznapibb kifejezésekkel magyarázgattam.
    Gondoltam megkérdezem, biztos ami biztos.
    Köszönöm a választ.

Új hozzászólás Aktív témák