tipos tener servicios reglas públicos público programar proceso por para obligatorio objeto metodos defecto deben crear construccion clases atributo java reflection static

tener - iterar valores int estáticos en java



reglas para programar en java (5)

Como alternativa, use una enumeración y elimine por completo las variables de clase (para ser precisos, la enumeración también es una variable de clase :-)):

class Any { enum Number { ONE(1), TWO(2), THREE(3); Number(int number) { this.number = number; } int number; }; public static void main(String [] args) { for (Number value : Number.values()) { System.out.println(value.number); } } }

Tengo una pregunta simple ¿Hay alguna manera (supongo que utilizando reflexiones) de iterar todos los valores estáticos de una clase?

Por ejemplo

class Any { static int one = 1; static int two = 2; static int three = 3; public static void main( String [] args ) { for( int i : magicMethod( Any.class ) ){ System.out.println( i ); } } }

Salida

1 2 3

Gracias.


Oye ... fue muy fácil. :PAG

Field [] constants = Main.class.getFields(); Object some = new Main(); for( Field field : constants ){ if(Modifier.isStatic(field.getModifiers() ) && field.getType() == int.class ) { System.out.println( field.getInt( some ) ); } }


Podrías hacer algo como esto:

import java.lang.reflect.*; public class Foo { public static int one = 1; public static int two = 2; public static int three = 3; public static void magicMethod( Class clz ) throws Exception { Field[] fields = clz.getFields(); System.out.println(""+fields); for( Field field : fields ) { int modifiers = field.getModifiers(); if( ! Modifier.isStatic(modifiers) ) continue; System.out.println("" + field.get(null)); } } public static void main(String[] args) throws Exception { Foo.magicMethod( Foo.class ); }}

Sin embargo, es importante señalar que los campos deben ser públicos para que esto funcione. No es exactamente lo que pediste, pero debe ser lo suficientemente cerca como para que puedas hacer que funcione para lo que necesitas. Obviamente, esto no implica ningún tipo de manejo de errores ni nada, por lo que debe asegurarse de manejar cualquier error o excepción en su aplicación real.


Su solución funciona para campos públicos pero no para campos privados como los que tiene en su ejemplo. Si desea poder acceder a los campos privados de una clase, necesita usar getDeclaredFields () en lugar de getFields ().


import java.util.*; import java.lang.reflect.*; class Any { static int one = 1; static int two = 2; static int three = 3; public static void main( String [] args ) { for( int i : magicMethod( Any.class ) ){ System.out.println( i ); } } public static Integer[] magicMethod(Class<Any> c) { List<Integer> list = new ArrayList<Integer>(); Field[] fields = c.getDeclaredFields(); for (Field field : fields) { try { if (field.getType().equals(int.class) && Modifier.isStatic(field.getModifiers())) { list.add(field.getInt(null)); } } catch (IllegalAccessException e) { // Handle exception here } } return list.toArray(new Integer[list.size()]); } }