Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

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