
рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (* .ini, * .prop, * .conf, рдЖрджрд┐) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдЧреБрдг рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЖрдИрдПрдирдЖрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реЗрдЯрд┐рдВрдЧ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдердХрд╛рдК рдФрд░ рдирд┐рдпрдорд┐рдд рдХрд╛рдо рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдЧреБрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦреЗрдВред
NProperty (
рдП рдПрди рдиреЛрдЯреЗрдб
рдкреНрд░реЙрдкрд░реНрдЯреА )
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЛрдбрд░ рдХреЛ рд▓рдЧрднрдЧ рдЖрдзреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдб рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣рд▓ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рджреЛ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ: рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирдХ рдЧреБрдг рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛, nPropertyред
рд▓реЗрдЦ рдФрд░ nProperty рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЦреБрдж рдХреЛ рдореЗрд░реЗ рджреЛрд╕реНрдд рдФрд░ рджреБрдХрд╛рди рд╕рд╣рд╛рдпрдХ Yorie рджреНрд╡рд╛рд░рд╛ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЪреВрдВрдХрд┐ рд╡рд╣, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдм рдкрд░ рдирд┐рдордВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдЙрдирдХреА рд░рдЪрдирд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреА рд╕рд╣рдорддрд┐ рд╕реЗ, рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реА " рдЦрд╛рдмрд░реЛрд╡рд╕реНрдХреА "рдЬрдирддрд╛редрд╕рд╛рдордЧреНрд░реА
- рдмрд╕ рдореБрдЦреНрдп рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
- рдЖрджрд┐рдо рдФрд░ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдкрдврд╝рдирд╛
- рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдореЗрдВ рд╡рд┐рд╡рд░рдг
- рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди
- рдкрд╣реБрдБрдЪ рд╕реНрддрд░ рд╕рдВрд╢реЛрдзрдХ
- рд╕рднреА рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди
- рдирд╛рдо рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд
- рдЧреИрд░-рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
- рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ
- рд╕реНрдЯреНрд░реАрдо рдФрд░ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдЯрд┐рдкреНрдкрдгреА
- рд▓рд╛рдЗрд╕реЗрдВрд╕
- рд╕рдВрджрд░реНрдн
рдмрд╕ рдореБрдЦреНрдп рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
SOME_INT_VALUE = 2 SOME_DOUBLE_VALUE = 1.2 SOME_STRING_VALUE = foo SOME_INT_ARRAY = 1;2;3
рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ резред рдорд╛рдирдХ рдЧреБрдг рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред public class Example1 { private static int SOME_INT_VALUE = 1; private static String SOME_STRING_VALUE; private static int[] SOME_INT_ARRAY; private static double SOME_DOUBLE_VALUE; public Example1() throws IOException { Properties props = new Properties(); props.load(new FileInputStream(new File("config/example.ini"))); SOME_INT_VALUE = Integer.valueOf(props.getProperty("SOME_INT_VALUE", "1")); SOME_STRING_VALUE = props.getProperty("SOME_STRING_VALUE"); SOME_DOUBLE_VALUE = Double.valueOf(props.getProperty("SOME_DOUBLE_VALUE", "1.0"));
рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2ред NProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред @Cfg public class Example2 { private static int SOME_INT_VALUE = 1; private static String SOME_STRING_VALUE; private static int[] SOME_INT_ARRAY; private static double SOME_DOUBLE_VALUE; public Example2() throws NoSuchMethodException, InstantiationException, IllegalAccessException, IOException, InvocationTargetException { ConfigParser.parse(Example2.class, "config/example.ini"); } public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IOException, IllegalAccessException { new Example2(); } }
рд╢рд╛рдпрдж, рдЗрди рд╕реБрдВрджрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ, рдпрд╣ рддрдереНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рджреЛ рдмрд╛рд░ рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :) рдпреЗ рдЙрджрд╛рд╣рд░рдг рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЪрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рдФрд░ рд╕реВрдХреНрд╖реНрдо рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рднреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдмрд╛рддред
рдЖрджрд┐рдо рдФрд░ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдкрдврд╝рдирд╛
рдЙрдкрд░реЛрдХреНрдд рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдкрдХреЛ
@ fg рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрдо рдХреЛрдб рдХрд╛ рдХрд╛рд░рдг рд╣реИред NProperty рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ, рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЖрджрд┐рдо рд╣реИ, рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди @ gg рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
public class Example3 { @Cfg private static int SOME_INT_VALUE; @Cfg private static short SOME_SHORT_VALUE; @Cfg private static long SOME_LONG_VALUE; @Cfg private static Double SOME_DOUBLE_VALUE; }
NProperty рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рдлреА рд╕рдореГрджреНрдз рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ:
- рдкреВрд░реНрдгрд╛рдВрдХ / рдЗрдВрдЯ
- рдЫреЛрдЯрд╛ / рдЫреЛрдЯрд╛
- рдбрдмрд▓ / рдбрдмрд▓
- рд▓рдВрдмрд╛ / рд▓рдВрдмрд╛
- рдмреВрд▓рд┐рдпрди / рдмреВрд▓рд┐рдпрди
- рддрд╛рд░
- рдЪрд░рд┐рддреНрд░ / рдЪрд╛рд░
- рдмрд╛рдЗрдЯ / рдмрд╛рдЗрдЯ
- рдПрдЯреЛрдорд┐рдХрдЗрдВрдЯрд░, рдПрдЯреЙрдорд┐рдХрд▓реЙрдиреНрдЧ, рдПрдЯреЙрдорд┐рдХрдмреБрд▓рд┐рдпрди
- BigInteger, BigDecimal
рдЗрди рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдореЗрдВ рд╡рд┐рд╡рд░рдг
рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рдЪрд▓рди рднреА рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ - рд╕рд░рдгреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХрдИ рдорд╛рдирдХ рдорд╛рдирдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
public class Example5 { @Cfg(splitter = "--") private static int[] SOME_INT_ARRAY; @Cfg(splitter = "[><]") private static short[] SOME_SHORT_ARRAY; @Cfg private static BigInteger[] SOME_BIGINTEGER_ARRAY; }
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгреА рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
SOME_INT_ARRAY рдФрд░ SOME_SHORT_ARRAY рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, nProperty рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд░реВрдк рдореЗрдВ ";" рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕реНрдкреНрд▓рд┐рдЯрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реАрдорд╛рдВрдХрдХ рдПрдХ рдкреВрд░реНрдг рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╕реВрдЪрд┐рдпрд╛рдВред рдпрд╣рд╛рдВ рдПрдХ рд╢рд░реНрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (ArrayList, LinkedList, рдЖрджрд┐)ред
public class Example6 { @Cfg private static List<Integer> SOME_ARRAYLIST_COLLECTION = new ArrayList<>(); @Cfg private static List<Integer> SOME_LINKEDLIST_COLLECTION = new LinkedList<>(); }
рдЕрдиреНрдпрдерд╛, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рднреА deserialization рдЧреБрдг рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: MyClass (рд╕реНрдЯреНрд░рд┐рдВрдЧ), рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреГрд╢реНрдпрддрд╛ рд╕реНрддрд░ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдпрд╛ рдирд┐рдЬреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
public class Example8 { private static class T { private final String value; private T(String value) { this.value = value; } public String getValue() { return value; } } @Cfg private static T CUSTOM_CLASS_VALUE; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореВрд▓реНрдп рд╡рд░реНрдЧ рдЯреА рдХреЗ рдореВрд▓реНрдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд╣реБрдБрдЪ рд╕реНрддрд░ рд╕рдВрд╢реЛрдзрдХ
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ nProperty рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб, рдкрджреНрдзрддрд┐ рдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╝рд╛рдпрд░ рдХреНрдпрд╛ рд╣реИ - рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░рд┐рдлреНрд▓реЗрдХреНрд╢рдВрд╕ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрди рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред
рд╕рднреА рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ @ fg рдПрдиреЛрдЯреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдХрд╛рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, nProperty рдЖрдкрдХреЛ рд╡рд░реНрдЧ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
@Cfg public class Example7 { private static int SOME_INT_VALUE = 1; private static String SOME_STRING_VALUE; private static int[] SOME_INT_ARRAY; private static double SOME_DOUBLE_VALUE; private static List<Integer> SOME_ARRAYLIST_COLLECTION = new ArrayList<>(); private static List<Integer> SOME_LINKEDLIST_COLLECTION = new LinkedList<>(); @Cfg(ignore = true) private final static Logger log = Logger.getAnonymousLogger(); }
рдпрд╣рд╛рдВ рдпрд╣ рд▓реЙрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рджрд╕реНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЙрдиреНрд╣реЗрдВ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде @ fg рдПрдиреЛрдЯреЗрд╢рди рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдПрдиреЛрдЯреЗрд╢рди рдкреВрд░реЗ рд╡рд░реНрдЧ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╣рд╛рди рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдХрднреА рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
@Cfg public class Example9 { private int WRONG_PROPERTY = 9000; private int SOME_INT_VALUE; }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, 9000 рдХрд╛ рд╕рдорд╛рди рдорд╛рди WRONG_PROPERTY рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд╛рдо рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд
рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public class Example10 { @Cfg("SOME_INT_VALUE") private int myIntValue; }
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХреЛрдб рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╛рдореЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдЗрд╕рд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЧреИрд░-рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ configParser.parse () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
@Cfg public class Example11 { private static int SOME_SHORT_VALUE; private int SOME_INT_VALUE; public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, IOException, InvocationTargetException { ConfigParser.parse(Example11.class, "config/example.ini");
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред ConfigParser.parse рдореЗрдердб (рдЙрджрд╛рд╣рд░рдг11.class, "config / example.ini") рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, SOME_INT_VALUE рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝реАрд▓реНрдб рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
ConfigParser.parse (рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг 11 (), "config / example.ini") рдХреЗ рджреВрд╕рд░реЗ рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдмрдирд╛рдИ рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП SOME_INT_VALUE рдлрд╝реАрд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореВрд▓реНрдп рдкрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред
рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╕реНрдерд┐рддрд┐ "рдЕрддреБрд▓рдиреАрдп" рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрдЧреА, рддрдм рднреА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рд╕рдВрд╢реЛрдзрдХ рдмрд╕ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд╢реАрдХрд░рдг рдХрд░реЗрдВред
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рддреАрди рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
- рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдпрд╛ рдмрджрд▓реЗрдВ
- рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)
- рд╕рдВрдкрддреНрддрд┐ рд╕реВрдЪреА рд╕реЗ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрд╛рд╣рд░ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд╣реА рддрд░реАрдХрд╛ рдирдВрдмрд░ 3 рд╣реИред NProperty рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА:
public class Example12 { private static List<Integer> VALUE_CHECK = new ArrayList<>(); @Cfg("SOME_INT_ARRAY") private void checkIntArray(String value) { String[] values = value.split("--"); for (String val : values) { try { VALUE_CHECK.add(Math.max(0, Math.min(100, Integer.parseInt(val)))); } catch (Exception ignored) {} } } }
рдпрд╣рд╛рдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ SOME_INT_ARRAY рдХрд╛ рдорд╛рди рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ checkIntArray (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рд╡рд┐рдзрд┐ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рд╣реИ рдЬрдм рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рднрд╛рдЬрдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рд╕рдордп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рднрд╛рдЬрди рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдпрджрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рддреЛ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИред
рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рддрд░рд╣, рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдирд╛рдо рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ
NProperty рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдврд╝рддреЗ рд╣реБрдП рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IPropertyListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдИрд╡реЗрдВрдЯ рдкреВрд░реНрдгрд░реВрдкреЗрдг рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╣реА рдЙрдард╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬреЛ IPropertyLiveener рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдорд░реНрдерд┐рдд рдШрдЯрдирд╛рдПрдБ:
- onStart (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрде) - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
- onPropertyMiss (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо) - рдЕрдЧрд░ рдХреБрдЫ рдирд╛рдорд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛, рддреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди @ fg рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЧ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- onDone (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрде) - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
- onInvalidPropertyCast (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди) - рдЙрд╕ рд╕рдордп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдорд╛рди рдХреЛ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рди рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрд╛ред
@Cfg public class Example13 implements IPropertyListener { public int SOME_INT_VALUE; public int SOME_MISSED_VALUE; public int SOME_INT_ARRAY; @Override public void onStart(String path) { } @Override public void onPropertyMiss(String name) { } @Override public void onDone(String path) { } @Override public void onInvalidPropertyCast(String name, String value) { } public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, IOException, InvocationTargetException { ConfigParser.parse(new Example13(), "config/example.ini"); } }
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рднреА 4 рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред OnPropertyMiss рдЗрд╡реЗрдВрдЯ SOME_MISSED_VALUE рдлрд╝реАрд▓реНрдб рдХреЗ рдХрд╛рд░рдг рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ SOME_INT_ARRAY рдХреЗ рдХрд╛рд░рдг onInvalidPropertyCast рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдЯреНрд░реАрдо рдФрд░ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рди рдХреЗрд╡рд▓ рдирд╛рдо рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИ, рдпрд╣ java.io.File рдСрдмреНрдЬреЗрдХреНрдЯ, рдпрд╛ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ java.io.InputStream рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ:
@Cfg public class Example14 { public int SOME_INT_VALUE; public int SOME_MISSED_VALUE; public int SOME_INT_ARRAY; public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, IOException, InvocationTargetException { ConfigParser.parse(new Example14(), "config/example.ini"); ConfigParser.parse(new Example14(), new File("config", "example.ini")); ConfigParser.parse(new Example14(), new FileInputStream("config/example.ini"), "config/example.ini"); } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп FileInputStream рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдирд╛рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЬрдм рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рди рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЬрд╛рд╡рд╛ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Java.io.InputStream рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ
рдПрдВрдбреНрд░реЙрдЗрдб рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИ:
@Cfg public class ConfigGeneral extends PropertyListenerImpl { public static String SERVER_IP; public static int SERVER_PORT; private ConfigGeneral() { String path = "config/network/general.ini"; try { InputStream input = getApplicationContext().getResources().getAssets().open(path); ConfigParser.parse(this, input, path); } catch(Exception e) { Log.e(TAG, "Failed to Load " + path + " File.", e); } } public static void loadConfig() { new ConfigGeneral(); } }
рдЯрд┐рдкреНрдкрдгреА
SecurityManager рдХреЗ рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░рдг, рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЛ рд╕реЗрдЯ
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ: рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрдХ
рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред
рд▓рд╛рдЗрд╕реЗрдВрд╕
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ Apache рд▓рд╛рдЗрд╕реЗрдВрд╕ v.2.0 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИ
рд╕рдВрджрд░реНрдн