JavaRush /Блоги Java /Random-TG /Оғозсозии қавси дукарата
Joysi
Сатҳи

Оғозсозии қавси дукарата

Дар гурӯҳ нашр шудааст

1. Оғозкунии дукарата

Оғозсозӣ бо истифода аз қавсҳои дукарата ( минбаъд ҳамчун ибтидосозии дукарата номида мешавад ) як воситаи Java барои эҷоди коллексияҳо ба монанди рӯйхат, маҷмӯа ва харита ҳамзамон бо эъломияи онҳо мебошад.
Оғозкунии дукарата - 1
Вақте ки ба шумо рӯйхатҳо бо унсурҳои собит лозим аст, ба монанди рӯйхати маҳсулот ё асъори дастгирӣшаванда, эълон кардани рӯйхат ҳамзамон ҳангоми оғоз кардани он хониши codeро беҳтар мекунад. Ин аст, ки чаро инициализатсияи дукарата шӯҳрат пайдо мекунад, зеро дигар усулҳои стандартии эҷоди коллексияҳо бо оғозкунии ҳамзамон дар code вуҷуд надоранд. Мутаассифона, бар хилофи дигар забонҳои барномасозӣ, Java маҷмӯаҳои литералиро дастгирӣ намекунад. Аз сабаби ин маҳдудият, эҷоди unmodifiableList бо ҳатто шумораи ками унсурҳо моро маҷбур мекунад, ки сатрҳои зиёди codeро дар шакли зангҳои такрорӣ нависем add(), то унсурҳои дилхоҳро бо печонидани ниҳоӣ илова кунем:
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(5);
list.add(7);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
Ин тавсифи нолозим аст, ки онро содда кардан мумкин аст. Биёед рӯйхатҳои статикиро ба тарзе, ки барои мо қулай аст, пур кунем, яъне бевосита дар блокҳои статикӣ ҳангоми оғозёбӣ, ки ин ба Double braceмо инициализатсия кӯмак мекунад ва ба мо имкон медиҳад ҳама чизро дар як сатр нависем:
List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>() {{
        add(2);
        add(3);
        add(5);
}});
Ба ҳамин монанд, Double braceоғозёбӣ ба мо кӯмак мекунад, ки арзишҳоро пур кунем ва HashMap:
Map<Integer, String> intToString = new HashMap<Integer, String>(){{
         put(1, "one");
         put(2, "two");
         put(3, "three");
 }};
Ин ҳама хеле шево ба назар мерасад, аммо он камбудиҳои худро дорад, ки оғозкунии дукаратаро як намунаи зиддитеррористӣ месозад. Мо онҳоро дар боби оянда бештар дида мебароем.

Тарафҳои мусбат ва манфии оғозкунии дукарата.

Doubleоғозкунии қавс эҷоди синфи дохorи беномро истифода мебарад . Он чизе, ки дар аввал дар рӯи замин пинҳон аст, Double braceинициализатсия синфро бо оғозкунии минбаъдаи мисоли он ҳар вақте, ки шумо онро истифода мебаред, эҷод мекунад. Илова бар ин, истиноди пинҳонӣ ба ин синфи хусусӣ истифода мешавад, ки метавонад моро ба ихроҷи хотираи эҳтимолӣ расонад. Шумо инчунин наметавонед оператори арвоҳро барои генерикҳо истифода баред (оператори алмос < >), зеро мо наметавонем ба дохor синфи беном дастрасӣ пайдо кунем.
(Аз тарҷумон: Бори дигар муфассалтар:
пас аз якум {, синфи беном дар дохor эҷод мешавад, пас аз дуюм, {ҳангоми сохтани як мисоли синф, ки дар он мо ба майдонҳо ва усулҳои берунии ( нисбат ба беном) синф.)
Тарафдор:
  1. Кам кардани сатрҳо дар code
  2. Эҷод ва оғозёбӣ дар як ифода.
Камбудиҳо:
  1. Эҷоди синфи беном аз шумо пинҳон.
  2. Ин барои мисоли он ҳар дафъае, ки мо онро истифода мебарем, ба мо хароҷоти иловагиро талаб мекунад.
  3. Ҳар дафъае, ки истинод ба он пинҳон карда мешавад, ки метавонад боиси ихроҷи хотира гардад.
Ҳукм: Аз сабаби манфиҳои дар боло зикршуда ва мавҷудияти алтернативаҳо ба Double brace, инициализатсия дар ҷаҳони Java як намунаи зиддитеррористӣ ҳисобида мешавад. Гурбачаро наҷот диҳед

Алтернативаҳо барои оғозкунии дукарата дар Java

Хабари хуш ин аст, ки роҳҳои дигари расидан ба ҳамон ҳадафҳо дар Java вуҷуд доранд. Мо метавонем дар як сатри code сохтан ва оғоз кардани ArrayList-ро бо истифода аз конструктори Copy аз синфи Коллексия тавре ки дар зер нишон дода шудааст, амалӣ созем:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Arrays.asList()ба мо рӯйхати дарозии собитро, ки ба ArrayListсозандаи нусхабардорӣ дода шудааст, бармегардонад. Фарқи байни рӯйхатҳои дарозии собит, ки аз Arrays.asList()ва баргардонида шудаанд, дар хотир нигоҳ доред Collections.unmodifiableList(): шумо наметавонед ҷузъҳои ArrayList- -ро илова кунед ё хориҷ кунед, аммо шумо метавонед як унсурро бо истифода аз индекс тағир диҳед set(), ки онро бо рӯйхати баргардонидашуда иҷро карда наметавонед Collections.unmodifiableList(). Агар шумо хоҳед, ки рӯйхати хурд гиред, ин роҳи беҳтарин аст, гарчанде ки он барои Setколлексияҳои дигар камтар шаффоф хоҳад буд, бинобар ин шумо бояд онро Listпеш аз эҷод кардани Set-a эҷод кунед. Аммо ин ҳанӯз ҳам беҳтар аз ибтидосозии дукарата аст, зеро дар ин ҳолат синфи иловагии дохorи беном ҳар дафъа истифода мешавад, эҷод намешавад. Агар шумо Java 8-ро иҷро кунед, шумо усули дигари алтернативӣ доред. JDK 8 Stream API ба шумо тавассути омезиши Stream Factoryусулҳои баромад дар коллексия коллексияҳои хурд эҷод мекунад List:
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
Барои Setшумо метавонед Collectors.toSet()ба ҷои ин усулро Collectors.toList()ба таври зерин истифода баред:
Set<String> set = Collections.unmodifiableSet(Stream.of("abc", "bcd", "cde").collect(toSet()));
Дар омади гап, Stream collectусулҳо кафолат намедиҳанд, ки коллексияҳои тавлидшуда аз тағирот муҳофизат карда мешаванд. Дар Java 8, маҷмӯаҳои баргардонидаи онҳо (ба монанди - ArrayList, HashSet, ва HashMap) хеле маъмуланд (мо метавонем онҳоро тағир диҳем), аммо ин далел метавонад дар релизҳои ояндаи JDK ислоҳ карда шавад. Ин ҳама дар бораи Double braceоғозёбӣ дар Java аст. Ин қолаб барои санҷишҳо ва намоишҳо қобor қабул аст, аммо барои истифодаи истеҳсолӣ кофӣ нест. Аз сабаби нуқсонҳои хоси худ, оғозкунии дукарата дар ин рӯзҳо, бахусус бо назардошти алтернативаҳои дастрас ба як намунаи зиддилағзиш табдил ёфтааст. Ман худам то ҳол ин сохтмонро барои оғоз кардани харитаҳои статикӣ истифода мебарам ва ҳамин тавр. Зеро Listман бартарӣ медиҳам, ки Collectionsбо якҷоякунӣ бо эҷод Array.asListдар созандаи он эҷод кунам. Ва агар ман Java 8 -ро истифода барам - тарроҳӣ бо истифода аз Stream API ва collect(). Мақолаҳои марбут: Агар ба шумо аз ин дарс писанд омад ва хоҳед, ки дар бораи намунаҳои барномасозии Java, принсипҳо ва таҷрибаҳои беҳтарин маълумоти бештар гиред, шумо инчунин метавонед мақолаҳои дигари сайти моро тафтиш кунед . Хониши тавсияшаванда: Агар шумо хоҳед, ки дар бораи намунаҳо ва таҷрибаҳои беҳтарин маълумоти бештар гиред, шумо бояд Барномасозии самараноки Ҷошуа Блокро хонед , ҳеҷ китоб ҷои онро гирифта наметавонад. Ва агар шумо аллакай забони Java-ро донед ва дар ҷустуҷӯи китобе дар бораи намунаҳои тарроҳӣ бошед, ки услуби ҳаҷвии муаррифии он ҷолиб ва хондан осон аст, ба "Аввал сар. Намунаҳои тарроҳӣ" .
Аз тарҷумон: Ман дидаву дониста истинод ба китоби аслии Блох додам, зеро тарҷумаи он ба русӣ муваффақ набуд (масалан, Созандаи = созанда).
Тарҷумаи мақола Initialization Double Brace дар Java чист? Намунаи зидди намуна (интишори октябри 2015).
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION