рдЬрд╛рд╡рд╛ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдирд╛рдо рдХреА рдЧрдгрдирд╛

рдХреБрдЫ рдЙрдкрдХрд░рдг String



рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рд╢рд╛рдмреНрджрд┐рдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ: рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреБрдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдкреБрд░рд╛рдиреЗ, рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореВрд▓реНрдп рд░рд╣реЗрдВрдЧреЗред



рдЖрдк рдПрдХ рдердХрд╛ рд╣реБрдЖ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдзреНрдпрд╛рди, рдпрд╛ рдЕрд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реИред



рдиреАрдЪреЗ рдЙрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдФрд░ рдЙрд╕рдХреЗ рдЕрджреНрднреБрдд рдорд╛рдирджрдВрдб рдПрдкреАрдЖрдИ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░реЗрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд▓рдиреЗ рдкрд░ рдердХ рдЧрдпрд╛ рдерд╛ред



 package ru.bdm.reflection; import junit.framework.Assert; import org.junit.Test; import java.util.Date; import java.util.List; import static ru.bdm.reflection.PathExtractor.Example; /** * User: D.Brusentsov * Date: 22.04.13 * Time: 20:21 */ public class PathExtractorUsageForHabrahabr { public static class Pet { private String name; private Human owner; //getters and setters omitted } public static class Human { private String name; private Date birth; private List<Human> relatives; //getters and setters omitted } @Test public void getPetName() { String name = PathExtractor.getPath(new Example<Pet>() { @Override public void example(Pet pet) { pet.getName(); } }); Assert.assertEquals("name", name); } @Test public void getPetOwnerName() { String ownerName = PathExtractor.getPath(new Example<Pet>() { @Override public void example(Pet pet) { pet.getOwner().getName(); } }); Assert.assertEquals("owner.name", ownerName); } @Test public void getPetOwnerRelativesBirth() { String ownerRelativesBirth = PathExtractor.getPath(new Example<Pet>() { @Override public void example(Pet pet) { PathExtractor.mask(pet.getOwner().getRelatives()).getBirth(); } }); Assert.assertEquals("owner.relatives.birth", ownerRelativesBirth); } }
      
      







рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг PathExtractor.getPath



рд╡рд┐рдзрд┐ рд╕реЗ PathExtractor.getPath



рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ Example



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред Example



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрд╕реА рдирд╛рдо рдХреА рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЖрдкрдХреЛ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИред

рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рд╣рд╛рде рд╕реЗ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдирд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЕрдкрдиреЗ рдЖрдк рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ рдпрд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред



PathExtractor.getPath



рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ Example.example



рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рд╕рднреА рдХреЙрд▓реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рд╕рдорд╛рди рдкреНрд░реЙрдХреНрд╕реА рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



рдХреЛрдб рдмрд▓реНрдХрд┐ рдмреЛрдЭрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ 8 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЖрдИрдбреАрдИ рдЬреЛ рдЕрдирд╛рдо рдиреЗрд╕реНрдЯреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред



рд╡рд┐рдкрдХреНрд╖:





рдЖрдк Google рдбрд┐рд╕реНрдХ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдкрдбреЗрдЯ:



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд┐рдкреНрдкрдгреА vladimir_dolzhenko рдФрд░ рдЬрд╛рд╡рд╛ 8 рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд, рдЙрдкрдХрд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рд░рд╕реАрд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ:



 package ru.bdm.reflection; import org.junit.Test; import java.util.Date; import java.util.List; import static junit.framework.Assert.assertEquals; import static ru.bdm.reflection.PathExtractorJava8.of; /** * User: D.Brusentsov * Date: 22.04.13 * Time: 20:21 */ public class PathExtractorJava8UsageForHabrahabr { public static class Pet { private String name; private Human owner; //getters and setters omitted } public static class Human { private String name; private Date birth; private List<Human> relatives; //getters and setters omitted } @Test public void getPetName() { String name = of(Pet.class, Pet::getName).end(); assertEquals("name", name); } @Test public void getPetOwnerName() { String ownerName = of(Pet.class, Pet::getOwner).then(Human::getName).end(); assertEquals("owner.name", ownerName); } @Test public void getPetOwnerRelativesBirth() { String ownerRelativesBirth = of(Pet.class, Pet::getOwner) .thenMask(Human::getRelatives) .then(Human::getBirth).end(); assertEquals("owner.relatives.birth", ownerRelativesBirth); } }
      
      







Google рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред



All Articles