NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Erik Bystroň:13.1.2018 16:13

Ahoj, chci se zeptat, jak mám získat instanci interfacu které dědí z jiných interfacu které jsou implementovány různými classami.

Toto využívám u Springu, konkrétně u custom repository na získávání dat z databáze, ale tam se mi o to stará DI, a chtěl bych zjistit jak to udělat i někde jinde...

Za každou radu budu rád :-)

 
Odpovědět
13.1.2018 16:13
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 17:12

Ahoj, nejspise na pouzijes toto: https://docs.oracle.com/…t/Proxy.html snad je ta url ok

 
Nahoru Odpovědět
13.1.2018 17:12
Avatar
Odpovídá na gcx11
Erik Bystroň:13.1.2018 20:06

Díky, zítra to zkusím. Jak by se to dalo vyřešit v případě, že mám instanci interfacu ze kterého mimo jiné dědí ten interface jehož instanci chci získat, šlo by to nějak přehodit na to interface co z něj dědí?

 
Nahoru Odpovědět
13.1.2018 20:06
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 20:22

A ceho se tim snazis dosahnout? Samotny interface predepisuje kontrakt pro nejakou tridu, ktera to interface implementuje, vyrabet instanci primo z interface je divne.

 
Nahoru Odpovědět
13.1.2018 20:22
Avatar
Odpovídá na gcx11
Erik Bystroň:13.1.2018 20:49

Nemyslím přímo z interface to samozřejmě ne :-D Špatně jsem se vyjádřil, omlouvám se, mám interface Player které implementuje nějaká classa, a já tomu chci dodat funkce, ale nemůžu editovat zdrojový kód, takže to chci udělat stejně jako ve zmíněném Springu, vytvořím si další interface, který bude dědit z dvou interfacu, z Player a pak CustomPlayer, který je implementován classou CustomPlayerImpl a potřebuji získat tu instanci tak, abych mohl přistupovat k datům classy co implementuje interface Player i CustomPlayer :-)

Editováno 13.1.2018 20:50
 
Nahoru Odpovědět
13.1.2018 20:49
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 21:32

A ta trida, co implementuje Player, ta je tvoje vlastni nebo ne?

 
Nahoru Odpovědět
13.1.2018 21:32
Avatar
Odpovídá na gcx11
Erik Bystroň:13.1.2018 21:37

Není, nemám k ní přístup a nemůžu ji modifikovat

 
Nahoru Odpovědět
13.1.2018 21:37
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 22:02

Pokud jde o MC, tak funguje vyrobit wrapper tridu, ktera bere Player jako parametr v konstruktoru a zaroven implementuje interface Player, kde implementaci deleguje do wrapnute instance.

Jinak Kotlin vyse uvedenou vec obsahuje jako syntakticky cukr na jednu radku a navic ma extension metody, ktere by mozna taky sly pouzit.

 
Nahoru Odpovědět
13.1.2018 22:02
Avatar
Odpovídá na gcx11
Erik Bystroň:13.1.2018 22:22

Ano, jedná se o Spigot, mohl by jsi to více vysvětlit, nebo přiložit nějakou ukázku?

 
Nahoru Odpovědět
13.1.2018 22:22
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 22:42

Ok, pokusim se, ale pisu na mobilu, tak omluv muj kod, jestli to nebude 100% validni Java

Tvoje custom trida:

class CustomPlayer implements Player {
private Player player;
    public CustomPlayer(Player player) {
        this.player = player;
    }
    // metody z Player
    public void sendMessage(String message) {
        player.sendMessage(message)
    }
    ...

    // custom metody
    public void summonPet(PetType type) {}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.1.2018 22:42
Avatar
Odpovídá na gcx11
Erik Bystroň:13.1.2018 22:47

Jo díky, takhle to stačí, jen jsem se chtěl ujistit, že to chápu dobře :-)

 
Nahoru Odpovědět
13.1.2018 22:47
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:13.1.2018 22:49

plus samozrejme metoda na ziskani te wrapnute instance, kdyz to budes nekam predavat anebo muzes implementovat i CraftPlayer a dalsi interface, ale to budes mit pak neprenositelne mezi verzemi

Editováno 13.1.2018 22:50
 
Nahoru Odpovědět
13.1.2018 22:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.