IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Finální proměnná se neinitializuje

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
CreeperFace
Člen
Avatar
CreeperFace:7.4.2017 14:30

Mám problém s jednou věcí, a to je to že mám finální proměnnou, která je rovnou definována. Ovšem když je zavolán konstruktor, tak když tuto proměnnou použiji hodí to null pointer exception, což absolutně nechápu. Třída dědí z jiné třídy a daná proměnná taktéž přepisuje proměnnou ze spodní třídy. Nová instance je vytvořena pomocí reflektů. Taktéž, když nějakou proměnnou v mé třídě definuji v konstruktoru, tak se její hodnota změní opět na null, jelikož když ji chci použít klidně hned po vytvoření instance tak je null. Což absolutně nechápu, jelikož konstruktor je zavolán jen jednou, takže musí jít o stejnou instanci a nic tuto danou proměnnou změnit nemůže.

public class LobbyNPC extends EntityCreature implements InventoryHolder {

    @Getter
    protected HumanInventory inventory;

    @Getter
    @Setter
    protected Skin skin;

    protected final EntityData dataProperties = (EntityData) (new EntityData()).putLong(0, 0L).putShort(7, 400).putShort(44, 400).putString(4, "").putLong(38, -1L).putFloat(39, 1.0F); //finální proměnná

    @Getter
    protected UUID uuid;

    public LobbyNPC(FullChunk chunk, CompoundTag nbt) {
        super(chunk, nbt);
    }

    @Override
    public void initEntity() {
        super.initEntity();

        this.dataProperties.putLong(DATA_FLAGS, (1 << DATA_FLAG_CAN_SHOW_NAMETAG) | (1 << DATA_FLAG_ALWAYS_SHOW_NAMETAG)); //NPE to vyhodí zde
    }
}
(EntityData) (new EntityData()).putLong(0, 0L).putShort(7, 400).putShort(44, 400).putString(4, "").putLong(38, -1L).putFloat(39, 1.0F);

nemůže být null protože všechny metody vracejí this

jinak třída ze které moje třída dědí: https://github.com/…reature.java
Jinak dal jsem tady jenom potřebnou část mé třídy.

Děkuji za jakoukoliv pomoc.

Editováno 7.4.2017 14:32
 
Odpovědět
7.4.2017 14:30
Avatar
CreeperFace
Člen
Avatar
CreeperFace:4.5.2017 10:47

Taktéž se stává, že pokud nastavím hodnotu nějaké proměnné v metodě, která je zavolána v konstruktoru, tak na konci této metody, je hodnota proměnné stále stejná, ovšem na dalším řádku v konstruktoru, (hned po zavolání metody) je tato proměnná 0 (když se jedná o int). (Jedná se samozřejmě o proměnnou ve třídě)

 
Nahoru Odpovědět
4.5.2017 10:47
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 2 zpráv z 2.