Stringනඩු සමඟ මාරුවීම් ප්රකාශයන් ජාවා එස්ඊ 7 හි ක්රියාත්මක කර ඇත . ප්රමාදයට පැහැදිලි හේතුවක් සපයා නැත, නමුත් එය බොහෝ විට කාර්ය සාධනය සමඟ සම්බන්ධ විය යුතුය.
JDK 7 හි ක්රියාත්මක කිරීම
විශේෂාංගය දැන් javac "සීනි රහිත" ක්රියාවලියක් සමඟ ක්රියාත්මක කර ඇත ; ප්රකාශනවල Stringනියතයන් භාවිතා කරන පිරිසිදු, ඉහළ මට්ටමේ වාක්ය ඛණ්ඩයක් caseසම්පාදනය කරන වේලාවේදී රටාවක් අනුගමනය කරමින් වඩාත් සංකීර්ණ කේතයක් දක්වා පුළුල් වේ. එහි ප්රති code ලයක් ලෙස ඇති කේතය සෑම විටම පවතින JVM උපදෙස් භාවිතා කරයි.
නඩු switchසමඟ A Stringසම්පාදනය කිරීමේදී ස්විච දෙකකට පරිවර්තනය වේ. පළමුවැන්න එක් එක් නූල් අද්විතීය පූර්ණ සංඛ්යාවක් වෙත සිතියම් ගත කරයි - එහි මුල් ස්විචයේ පිහිටීම. මෙය සිදු කරන්නේ පළමුව ලේබලයේ හැෂ් කේතය මාරු කිරීමෙනි. අනුරූප නඩුව යනු ifනූල් සමානාත්මතාවය පරීක්ෂා කරන ප්රකාශයකි; හැෂ් මත isions ට්ටන තිබේ නම්, පරීක්ෂණය කැස්කැඩින් if-else-ifවේ. දෙවන ස්විචය මුල් ප්රභව කේතයේ දර්පණය කරයි, නමුත් සිද්ධි ලේබල ඒවායේ අනුරූප ස්ථාන සමඟ ආදේශ කරයි. මෙම පියවර දෙකේ ක්රියාවලිය මුල් ස්විචයේ ප්රවාහ පාලනය ආරක්ෂා කිරීම පහසු කරයි.
ජේවීඑම් හි ස්විචයන්
වැඩි තාක්ෂණික ගැඹුරක් සඳහා switch, ඔබට ස්විච් ප්රකාශ සම්පාදනය විස්තර කර ඇති JVM පිරිවිතර වෙත යොමු විය හැකිය . කෙටියෙන් කිවහොත්, ස්විචයක් සඳහා භාවිතා කළ හැකි වෙනස් ජේවීඑම් උපදෙස් දෙකක් තිබේ, එය අවස්ථා වලදී භාවිතා කරන නියතයන්ගේ පරතරය මත පදනම් වේ. දෙකම රඳා පවතින්නේ කාර්යක්ෂමව ක්රියාත්මක කිරීම සඳහා එක් එක් සිද්ධිය සඳහා පූර්ණ සංඛ්යා නියත භාවිතා කිරීම මත ය.
නියතයන් ense න නම්, ඒවා දර්ශක දර්ශකයක් ලෙස (අවම අගය අඩු කිරීමෙන් පසුව) උපදෙස් දර්ශක වගුවකට - tableswitchඋපදෙස් ලෙස භාවිතා කරයි.
නියතයන් විරල නම්, නිවැරදි නඩුව සඳහා ද්විමය සෙවීමක් සිදු කරයි - lookupswitchඋපදෙස්.
වස්තු switchමත සීනි ඉවත් කිරීමේදී String, උපදෙස් දෙකම භාවිතා කිරීමට ඉඩ ඇත. මෙම lookupswitchනඩුව මුල් ස්ථානය සොයා ගැනීමට එහි පූරක කේත මත පළමු ස්විචය සඳහා සුදුසු වේ. එහි ප්රති ing ලයක් වශයෙන් ඕඩිනල් යනු ස්වාභාවික යෝග්යතාවයකි tableswitch.
මෙම උපදෙස් දෙකටම එක් එක් සිද්ධිය සඳහා පවරා ඇති පූර්ණ සංඛ්යා නියතයන් සම්පාදනය කරන වේලාවට වර්ග කිරීම අවශ්ය වේ. ධාවන වේලාවේදී, සාමාන්යයෙන් O(1)කාර්ය සාධනය කාර්ය සාධනයට tableswitchවඩා හොඳින් O(log(n))පෙනෙන අතර lookupswitch, අවකාශ-කාල වෙළඳාම සාධාරණීකරණය කිරීමට වගුව ense නද යන්න තීරණය කිරීම සඳහා යම් විශ්ලේෂණයක් අවශ්ය වේ. බිල් වෙනර්ස් විසින් මෙය වඩාත් සවිස්තරාත්මකව ආවරණය කරන විශිෂ්ට ලිපියක් ලියා ඇති අතර අනෙකුත් ජාවා ප්රවාහ පාලන උපදෙස් දෙස බැලූ බැල්මට පෙනේ.
JDK 7 ට පෙර
JDK 7 ට පෙර, enumආසන්න වශයෙන් Stringපදනම් වූ ස්විචයක් විය හැකිය. මෙය සෑම වර්ගයකම සම්පාදකයා විසින් ජනනය කරන ස්ථිතිකvalueOf ක්රමය භාවිතා කරයි enum. උදාහරණයක් වශයෙන්:
Pill p = Pill.valueOf(str);
switch(p) {
case RED: pop(); break;
case BLUE: push(); break;
}