Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Ukážka reflexie v Jave

Jednoduchá ukážka práce s reflexiou. Táto ukážka vznikla úplne neúmyselne a náhodne. sczdavos chcel poradiť ako má dostať z triedy Color názvy definovaných farieb + ich hodnoty. Napísal som mu to a potom ten "Šupák" : D povedal že je to moc dlhý a nechcel by to vysvetľovať v ukážkovom programe pre Android a nakoniec si to napísal podľa seba. Tak aspon sem hodím kód ako ukážku.

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());
        }
    }

}

Galéria


 

Všetky články v sekcii
Zdrojákoviště Java - Objektovo orientované programovanie
Program pre vás napísal Fugiczek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity