NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

Ukázka reflexe v Javě

Jednoduchá ukázka práce s reflexí. Tato ukázka vznikla úplně neúmyslně a náhodně. sczdavos chtěl poradit jak má dostat ze třídy Color názvy definovaných barev + jejich hodnoty. Napsal jsem mu to a pak ten "šupák" :D řekl že je to moc dlouhý a nechtěl by to vysvětlovat v ukázkovém programu pro androida a nakonec si to napsal podle sebe. Tak aspoň sem hodím kód jako ukázku.

import java.awt.Color;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Třída demonstrující práci s reflexí
 * @author Fugiczek
 */
public class ListColors {

    /**
     * List proměnných, tedy barev
     */
    private List<Field>barvy;
    /**
     * Třída s barvami
     */
    private Class<? extends Color> clazz = Color.class;

    /**
     * Konstruktor
     */
    public ListColors(){
        setFieldColors();
    }

    /**
     * Naplní náš list barvami
     */
    private void setFieldColors(){
        Field [] fields = clazz.getDeclaredFields(); //získání všech deklarovaných proměnných ze třídy
        Field [] barvy_all = new Field[fields.length-7]; //zmenšení pole tak aby se tam vešli jen barvy a nebyli navíc proměnné které nechceme
        System.arraycopy(fields, 0, barvy_all, 0, fields.length-7); //překopírování

        barvy = new ArrayList<>(Arrays.asList(barvy_all)); //vytvoření listu z pole barvy_all abychom mohli mazat prvky duplicitní

        for(int i = 0;i<barvy.size();i++){
            if(i<barvy.size()-1){
              if(barvy.get(i).getName().equalsIgnoreCase(barvy.get(i+1).getName().replace("_", ""))){
                  barvy.remove(i); //mazání barev tak aby zbyli jen ty co mají název velkými písmeny
                  i--;
              }
            }
        }
    }

    /**
     * Vypsání všech barev v jejich hodnoty
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    private void enumeration() throws IllegalArgumentException, IllegalAccessException{
        for(Field f : barvy){ //projetí cyklem for-each
            Color col = (Color) f.get(clazz); //získání objektu
            String rgb = Integer.toHexString(col.getRGB()); //převedení hodnoty barvy do hexadecimální
            rgb = rgb.substring(2, rgb.length()); //smazání prefixu 0x
            System.out.println(f.getName() + "->" + rgb);
        }
    }

    public static void main(String[]args){
        ListColors lc = new ListColors();
        try {
            lc.enumeration();
        } catch (Exception e) { //chyba vzniká když je proměnná nastavená jako private, což v našem případě není
            System.out.println("Chyba v přístupu k proměnné " + e.getMessage());
        }
    }

}

Galerie

Program byl vytvořen v roce 2012.

 

Všechny články v sekci
Zdrojákoviště Java - Objektově orientované programování
Program pro vás napsal Fugiczek
Avatar
Uživatelské hodnocení:
2 hlasů
Aktivity