What is a good use case for static import of methods? - Stack ...

文章推薦指數: 80 %
投票人數:10人

For example methods from java.lang.Math and java.awt.Color. But if abs and getAlpha are not ambiguous I don't see why readEmployee is. As in lot ... Home Public Questions Tags Users Collectives ExploreCollectives FindaJob Jobs Companies Teams StackOverflowforTeams –Collaborateandshareknowledgewithaprivategroup. CreateafreeTeam WhatisTeams? Teams CreatefreeTeam CollectivesonStackOverflow Findcentralized,trustedcontentandcollaboratearoundthetechnologiesyouusemost. Learnmore Teams Q&Aforwork Connectandshareknowledgewithinasinglelocationthatisstructuredandeasytosearch. Learnmore Whatisagoodusecaseforstaticimportofmethods? AskQuestion Asked 13yearsago Active 5monthsago Viewed 99ktimes 149 47 Justgotareviewcommentthatmystaticimportofthemethodwasnotagoodidea.ThestaticimportwasofamethodfromaDAclass,whichhasmostlystaticmethods.SoinmiddleofthebusinesslogicIhadadaactivitythatapparentlyseemedtobelongtothecurrentclass: importstaticsome.package.DA.*; classBusinessObject{ voidsomeMethod(){ .... save(this); } } ThereviewerwasnotkeenthatIchangethecodeandIdidn'tbutIdokindofagreewithhim.Onereasongivenfornotstatic-importingwasitwasconfusingwherethemethodwasdefined,itwasn'tinthecurrentclassandnotinanysuperclasssoittoosometimetoidentifyitsdefinition(thewebbasedreviewsystemdoesnothaveclickablelinkslikeIDE:-)Idon'treallythinkthismatters,static-importsarestillquitenewandsoonwewillallgetusedtolocatingthem. Buttheotherreason,theoneIagreewith,isthatanunqualifiedmethodcallseemstobelongtocurrentobjectandshouldnotjumpcontexts.Butifitreallydidbelong,itwouldmakesensetoextendthatsuperclass. So,whendoesitmakesensetostaticimportmethods?Whenhaveyoudoneit?Did/doyoulikethewaytheunqualifiedcallslook? EDIT:Thepopularopinionseemstobethatstatic-importmethodsifnobodyisgoingtoconfusethemasmethodsofthecurrentclass.Forexamplemethodsfromjava.lang.Mathandjava.awt.Color.ButifabsandgetAlphaarenotambiguousIdon'tseewhyreadEmployeeis.Asinlotofprogrammingchoices,Ithinkthistooisapersonalpreferencething. javastatic-import Share Follow editedJul29'21at7:21 JacobvanLingen 7,98766goldbadges4141silverbadges7272bronzebadges askedJan7'09at15:46 MiserableVariableMiserableVariable 27.7k1414goldbadges7070silverbadges126126bronzebadges 2 2 Hereisverygoodusageofstaticimports:ibm.com/developerworks/library/j-ft18 – intrepidis Jun26'13at17:39 2 @mr5thesyntaxisimportstatic,thefeatureisstaticimport – MiserableVariable Mar16'18at0:11 Addacomment  |  16Answers 16 Active Oldest Votes 162 ThisisfromSun'sguidewhentheyreleasedthefeature(emphasisinoriginal): Sowhenshouldyouusestaticimport?Verysparingly!Onlyuseitwhenyou'dotherwisebetemptedtodeclarelocalcopiesofconstants,ortoabuseinheritance(theConstantInterfaceAntipattern)....Ifyouoverusethestaticimportfeature,itcanmakeyourprogramunreadableandunmaintainable,pollutingitsnamespacewithallthestaticmembersyouimport.Readersofyourcode(includingyou,afewmonthsafteryouwroteit)willnotknowwhichclassastaticmembercomesfrom.Importingallofthestaticmembersfromaclasscanbeparticularlyharmfultoreadability;ifyouneedonlyoneortwomembers,importthemindividually. (https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html) TherearetwopartsIwanttocalloutspecifically: Usestaticimportsonlywhenyouweretemptedto"abuseinheritance".Inthiscase,wouldyouhavebeentemptedtohaveBusinessObjectextendsome.package.DA?Ifso,staticimportsmaybeacleanerwayofhandlingthis.Ifyouneverwouldhavedreamedofextendingsome.package.DA,thenthisisprobablyapooruseofstaticimports.Don'tuseitjusttosaveafewcharacterswhentyping. Importindividualmembers.Sayimportstaticsome.package.DA.saveinsteadofDA.*.Thatwillmakeitmucheasiertofindwherethisimportedmethodiscomingfrom. Personally,Ihaveusedthislanguagefeatureveryrarely,andalmostalwaysonlywithconstantsorenums,neverwithmethods.Thetrade-off,forme,isalmostneverworthit. Share Follow editedFeb22'18at15:33 ktulinho 3,58288goldbadges2525silverbadges3333bronzebadges answeredJan7'09at17:01 RossRoss 9,16888goldbadges3434silverbadges3535bronzebadges 2 9 Agreed.I'veusedstaticimportsveeeryoccasionallywherethey'veactuallymadethecodesignificantlyeasiertofollow. – NeilCoffey Jan7'09at17:36 2 IliketousethemwithCollectorsandstreams.IfeelaStream.collect(toSet())ismorereadablethanaStream.collect(Collectors.toSet()).Wouldthisbeconsideredanappropriateuse? – Snap Nov3'20at17:48 Addacomment  |  67 AnotherreasonableuseforstaticimportsiswithJUnit4.InearlierversionsofJUnitmethodslikeassertEqualsandfailwereinheritedsincethetestclassextendedjunit.framework.TestCase. //oldway importjunit.framework.TestCase; publicclassMyTestClassextendsTestCase{ publicvoidmyMethodTest(){ assertEquals("foo","bar"); } } InJUnit4,testclassesnolongerneedtoextendTestCaseandcaninsteaduseannotations.Youcanthenstaticallyimporttheassertmethodsfromorg.junit.Assert: //newway importstaticorg.junit.Assert.assertEquals; publicclassMyTestClass{ @TestpublicvoidmyMethodTest(){ assertEquals("foo","bar"); //insteadof Assert.assertEquals("foo","bar"); } } JUnitdocumentsusingitthisway. Share Follow answeredJan7'09at18:32 RobHruskaRobHruska 114k2828goldbadges163163silverbadges188188bronzebadges 2 5 I'dagree.Simplifyingtestcasesisoneplacewheretheintentisunlikelytobemisunderstood. – BillMichell Jan9'09at11:10 6 We'vehadthisonourprojectandactuallyhadissueswithpeopleusingassert()andincorrectlythinkingthatitcomesfromtheirstaticimportoftheAssertpackage.Oncewefoundthisproblem,aquickscanofourcode-basefoundaround30instancesofthisinourtestsmeaningthat30assertionswereNOTbeingrunwhenthetestframeworkwasexecutedbecausetheDEBUGflagisn'tsetwhenweruntests. – ChrisWilliams Dec3'13at18:49 Addacomment  |  30 EffectiveJava,SecondEdition,attheendofItem19notesthatyoucanusestaticimportsifyoufindyourselfheavilyusingconstantsfromautilityclass.Ithinkthisprinciplewouldapplytostaticimportsofbothconstantsandmethods. importstaticcom.example.UtilityClassWithFrequentlyUsedMethods.myMethod; publicclassMyClass{ publicvoiddoSomething(){ intfoo=UtilityClassWithFrequentlyUsedMethods.myMethod(); //Canbewrittenlessverboselyas intbar=myMethod(); } } Thishasadvantagesanddisadvantages.Itmakesthecodeabitmorereadableattheexpenseoflosingsomeimmediateinformationaboutwherethemethodisdefined.However,agoodIDEwillletyougotothedefinition,sothisisn'tmuchofanissue. Youshouldstillusethissparingly,andonlyifyoufindyourselfusingthingsfromtheimportedfilemany,manytimes. Edit:Updatedtobemorespecifictomethods,asthat'swhatthisquestionisreferringto.Theprincipleappliesregardlessofwhat'sbeingimported(constantsormethods). Share Follow editedJan14'21at12:38 Lii 10.5k77goldbadges5656silverbadges7575bronzebadges answeredJan7'09at18:20 RobHruskaRobHruska 114k2828goldbadges163163silverbadges188188bronzebadges 5 1 Myquestionisaboutstatic-importingmethods,notfields. – MiserableVariable Jan8'09at6:08 10 PerhapsUtilityClassWithFrequentlyUsedMethodsneedstobeshortened. – SteveKuo Sep6'12at19:59 5 @SteveKuocertainlylessthanInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState:P – AnirbanNag'tintinmj' Apr3'14at18:50 @Rob-HruskaCouldn'tIjustwrapastaticimportmethodorfieldinanewmethodorfieldifI'mplanningonusingthemfrequently?Wouldthatallowmetonotstaticallyimport?suchas:doublemyPI=Math.PI;andthenIcanIjustkeepreferringtomyPIinsteadofMath.PI. – Netero Jul8'14at13:17 @Abdul-Yeah,youcoulddothat. – RobHruska Jul8'14at13:33 Addacomment  |  20 IthinkstaticimportisreallyusefultoremoveredundantclassnameswhenusingutilsclasseslikeArraysandAssertions. NotsurewhybutRossskippedoutthelastsentencethatmentionsthisinthedocumentationheisreferencing. Usedappropriately,staticimportcanmakeyourprogrammorereadable,byremovingtheboilerplateofrepetitionofclassnames. Basicallycopiedfromthisblog:https://medium.com/alphadev-thoughts/static-imports-are-great-but-underused-e805ba9b279f Soforexample: Assertionsintests ThisisthemostobviouscasewhichIthinkweallagreeon Assertions.assertThat(1).isEqualTo(2); //Usestaticimportinstead assertThat(1).isEqualTo(2); Utilsclassesandenums Theclassnamecanberemovedinmanycaseswhenusingutilsclassesmakingthecodeeasiertoread Listnumbers=Arrays.asList(1,2,3); //asListmethodnameisenoughinformation Listnumbers=asList(1,2,3); java.timepackagehasafewcaseswhereitshouldbeused //GetnextFridayfromnow,quiteannoyingtoread LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.FRIDAY)); //Moreconciseandeasiertoread LocalDate.now().with(next(FRIDAY)); ExampleofwhenNOTtouse //OkthisisanOptional Optional.of("helloworld"); //Ihavenoideawhatthisis of("helloworld"); Share Follow editedOct7'20at6:42 answeredMar1'18at7:11 softarnsoftarn 4,82433goldbadges3535silverbadges5353bronzebadges Addacomment  |  17 Iagreethattheycanbeproblematicfromareadabilityperspectiveandshouldbeusedsparingly.Butwhenusingacommonstaticmethodtheycanactuallyincreasereadability.Forexample,inaJUnittestclass,methodslikeassertEqualsareobviouswheretheycomefrom.Similarlyformethodsfromjava.lang.Math. Share Follow editedJul26'10at14:37 RobHruska 114k2828goldbadges163163silverbadges188188bronzebadges answeredJan7'09at15:57 JoelJoel 1,39633goldbadges1414silverbadges1616bronzebadges 3 5 Andwhat'ssobadaboutseeingMath.round(d)versusround(d)? – SteveKuo Jan7'09at17:40 7 @SteveKuo-forthesamereasonthatmathematiciansuseone-lettervariablenameswhenmanipulatingformulas:therearetimeswhenlongernamesinterfereswithreadabilityoftheoverallstatement.Consideraformulainvolvingmultipletrigonometricfunctions.Aneasilygraspedmathformula:sinxcosy+cosxsiny.InJavabecomes:Math.sin(x)*Math.cos(y)+Math.cos(x)*Math.sin(y).Horribletoread. – ToolmakerSteve Sep6'14at18:19 @ToolmakerSteve,that'swhyImissedusingdirectiveinC++somuch:theycanbelocal. – FranklinYu May1'16at5:07 Addacomment  |  12 IuseitforColoralot. staticimportjava.awt.Color.*; Itisveryunlikelythatthecolorswillbeconfusedwithsomethingelse. Share Follow editedJan7'09at17:19 answeredJan7'09at16:35 jjnguyjjnguy 132k5252goldbadges293293silverbadges323323bronzebadges 1 1 ThatisoneofthebestusecasesIhaveseenthatdiffersfromtheoldJUnit/Hamcrest/TestNGone. – kevinarpe Jun30'15at11:52 Addacomment  |  5 IrecommendtheuseofstaticimportwhenusingOpenGLwithJava,whichisause-casefallingintothe"heavyuseofconstantsfromautilityclass"category Considerthat importstaticandroid.opengl.GLES20.*; allowsyoutoportoriginalCcodeandwritesomethingreadablesuchas: glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,texture); glUniform1i(samplerUniform,0); glBindBuffer(GL_ARRAY_BUFFER,vtxBuffer); glVertexAttribPointer(vtxAttrib,3,GL_FLOAT,false,0,0); insteadofthatcommonwidespreadugliness: GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,texture); GLES20.glUniform1i(samplerUniform,0); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,vtxBuffer); GLES20.glVertexAttribPointer(vtxAttrib,3,GLES20.GL_FLOAT,false,0,0); Share Follow editedMar19'16at23:38 Tunaki 122k4444goldbadges303303silverbadges389389bronzebadges answeredMar19'16at23:24 FlintFlint 1,52211goldbadge1616silverbadges2626bronzebadges Addacomment  |  3 Iuse'importstaticjava.lang.Math.*'whenportingmathheavycodefromC/C++tojava.Themathmethodsmap1to1andmakesdiffingtheportedcodeeasierwithouttheclassnamequalification. Share Follow answeredOct30'14at16:37 FracdroidFracdroid 1,1351010silverbadges1414bronzebadges Addacomment  |  2 Staticimportsaretheonly“new”featureofJavathatIhaveneverusedanddon’tintendtoeveruse,duetotheproblemsyoujustmentioned. Share Follow answeredJan7'09at15:48 BombeBombe 77.1k2020goldbadges119119silverbadges125125bronzebadges 1 ThanksBombe.Well,Idobelievetheymakebettersensethattohavetoextendandinterfacethatjustcontainsabunchofstaticfinals. – MiserableVariable Jan7'09at15:56 Addacomment  |  2 IfoundthistobeveryconvenientwhenusingUtilityclasses. Forexample,insteadofusing:if(CollectionUtils.isNotEmpty(col)) Icaninstead: importstaticorg.apache.commons.collections.CollectionUtils.isNotEmpty; if(isNotEmpty(col)) WhichIMOincreasescodereadabilitywhenIusethisutilitymultipletimesinmycode. Share Follow answeredNov9'18at18:09 YeikelYeikel 77699silverbadges1818bronzebadges Addacomment  |  2 Talkingaboutunittests:mostpeopleusestaticimportsforthevariousstaticmethodsthatmockingframeworksprovide,suchaswhen()orverify(). importstaticorg.mockito.Mockito.verify; importstaticorg.mockito.Mockito.when; Andofcourse,whenusingtheoneandonlyassertyoushouldbeusingassertThat()itcomesinhandytostaticallyimporttherequiredhamcrestmatchers,asin: importstaticorg.hamcrest.Matchers.*; Share Follow editedMar4'20at9:22 Yash 7,96144goldbadges1717silverbadges3535bronzebadges answeredMay25'18at13:16 GhostCatGhostCat 131k2323goldbadges163163silverbadges229229bronzebadges Addacomment  |  1 They'reusefultoreduceverbiage,particularlyincaseswheretherearealotofimportedmethodsbeingcalled,andthedistinctionbetweenlocalandimportedmethodsisclear. Oneexample:codethatinvolvesmultiplereferencestojava.lang.Math Another:AnXMLbuilderclasswhereprependingtheclassnametoeveryreferencewouldhidethestructurebeingbuilt Share Follow answeredJan7'09at15:57 kdgregorykdgregory 37.4k1010goldbadges7575silverbadges100100bronzebadges Addacomment  |  1 IthinkstaticimportsareneatforNLSinthegettext-style. importstaticmypackage.TranslatorUtil._; //... System.out.println(_("Helloworld.")); Thisbothmarksthestringasastringthathastobeextractedandprovidesaneasyandcleanwaytoreplacethestringwithitstranslation. Share Follow answeredJul26'13at10:30 MatthiasWuttkeMatthiasWuttke 1,92722goldbadges2020silverbadges3737bronzebadges Addacomment  |  1 IMOstaticimportisquiteanicefeature.Itisabsolutelytruethatheavyrelianceonstaticimportmakesthecodeunreadableanddifficulttounderstandwhichclassastaticmethodorattributebelongsto.However,inmyexperienceitbecomesausablefeatureespeciallywhendesigningUtilclasseswhichprovidesomestaticmethodsandattributes.Theambiguityarisingwheneverprovidingstaticimportcanbecircumventedbyestablishingcodestandards.Inmyexperiencewithinacompanythisapproachisacceptableandmakesthecodecleanerandeasytounderstand.PreferablyIinsertthe_characterinfrontstaticmethodsandstaticattributes(somehowadoptedfromC).ApparentlythisapproachviolatesthenamingstandardsofJavabutitprovidesclaritytocode.Forexample,ifwehaveaAngleUtilsclass: publicclassAngleUtils{ publicstaticfinalfloat_ZERO=0.0f; publicstaticfinalfloat_PI=3.14f; publicstaticfloat_angleDiff(floatangle1,floatangle2){ } publicstaticfloat_addAngle(floattarget,floatdest){ } } Inthiscasethestaticimportprovidesclarityandcodestructurelooksmoreeleganttome: importstaticAngleUtils.*; publicclassTestClass{ publicvoidtestAngles(){ floatinitialAngle=_ZERO; floatangle1,angle2; _addAngle(angle1,angle2); } } Rightawaysomeonecantellthewhichmethodorattributecomesfromastaticimportandithidestheinformationoftheclasswhichitbelongsto.Idontsuggestusingstaticimportforclassesthatareintegralpartofamoduleandprovidestaticandnon-staticmethodsasinthesecaseitisimportanttoknowwhichclassprovidescertainstaticfunctionality. Share Follow answeredAug25'14at16:16 eldjoneldjon 2,70422goldbadges1717silverbadges2323bronzebadges 1 Thanksforthesuggestionrenaming.BTW,anunderscoreinfrontistraditionallyusedinsomeenvironmentstonameprivatemethods/fields.I'mconsideringamodifiedconvention,suchasH_forimportsfromaHelperutilityclassIhave,orC_forCommon,orU_forUtility.Alternatively,I'veconsideredusingoneortwocharacterclassnamesforthesewidelyusedclasses,butwasconcernedthosemightsometimesconflictwithlocalnames-havesomelegacycodewithuppercasemethodnames. – ToolmakerSteve Jun24'15at20:41 Addacomment  |  -1 Youneedtousethemwhen: youwishtouseaswitchstatementwithenumvalues youwishtomakeyourcodedifficulttounderstand Share Follow editedDec5'14at13:34 MeneerVenus 1,03122goldbadges1212silverbadges2828bronzebadges answeredJan7'09at17:42 davetron5000davetron5000 22.6k1010goldbadges6666silverbadges9898bronzebadges 3 9 Thisisnottrue.(1)Youcanuseenumconstantsperfectlywellwithoutastaticimportofthem.(2)Staticimportsof,say,JUnitAssertclassmethodsareclearasabell."assertTrue(...)"isjustasreadableas"Assert.assertTrue(...)",perhapsmoreso. – AlanKrueger Jan7'09at19:00 6 ifyouhave5staticimportsina500lineclass,itisveryhardtotellwheremethodscomefrom. – davetron5000 Jan13'09at23:10 5 +1forwhenyouwishtomakeyourcodedifficulttounderstand:) – MiserableVariable Aug23'10at9:40 Addacomment  |  -5 IusethemwheneverIcan.IhaveIntelliJsetuptoremindmeifIforget.Ithinkitlooksmuchcleanerthanafullyqualifiedpackagename. Share Follow answeredJan7'09at16:22 JavamannJavamann 2,83422goldbadges2424silverbadges2222bronzebadges 2 13 You'rethinkingofregularimports.Staticimportsletyourefertomembersofaclasswithoutqualifyingthemwithaclassname,e.g.staticimportjava.lang.system.out;out.println("foo");//insteadofSystem.out.println("foo"); – sk. Jan7'09at17:08 Nowthisisaverygoodexplanationofstaticimports...toobadIcan't+1acomment – Eldelshell Jan7'09at17:23 Addacomment  |  YourAnswer ThanksforcontributingananswertoStackOverflow!Pleasebesuretoanswerthequestion.Providedetailsandshareyourresearch!Butavoid…Askingforhelp,clarification,orrespondingtootheranswers.Makingstatementsbasedonopinion;backthemupwithreferencesorpersonalexperience.Tolearnmore,seeourtipsonwritinggreatanswers. Draftsaved Draftdiscarded Signuporlogin SignupusingGoogle SignupusingFacebook SignupusingEmailandPassword Submit Postasaguest Name Email Required,butnevershown PostYourAnswer Discard Byclicking“PostYourAnswer”,youagreetoourtermsofservice,privacypolicyandcookiepolicy Nottheansweryou'relookingfor?Browseotherquestionstaggedjavastatic-importoraskyourownquestion. TheOverflowBlog Planfortradeoffs:Youcan’toptimizeallsoftwarequalityattributes AchatwiththefolkswholeadtrainingandcertificationatAWS FeaturedonMeta We’vemadechangestoourTermsofService&PrivacyPolicy-January2022 Newpostsummarydesignsongreatesthitsnow,everywhereelseeventually 2021:ayearinmoderation SunsettingJobs&DeveloperStory Linked 27 Arethereanyadvantagesofusingstaticimportoverimport? 10 what'stheadvantagetouse"importstatic"? 7 Isitagoodprogrammingpracticetouseimportstaticfields? 3 Correctuseofstaticimportsinjava -1 importdoesnotseemtobeworkingcorrectlyinEclipse/Java 22 MeaningoftheimportstatementinaJavafile 3 Non-classfunctionsinJava 5 CanIcallastaticmethodofanotherclasswithoutusingtheclassname? 3 Pmdrule:ToomanystaticimportsmayleadtomessycodeinunitTestisnotviolated 6 Howtogroupastreamtoamapbyusingaspecifickeyandvalue? Seemorelinkedquestions Related 462 Whatdoesthe"static"modifierafter"import"mean? 3251 WhatisaserialVersionUIDandwhyshouldIuseit? 1555 Fastestwaytodetermineifaninteger'ssquarerootisaninteger 373 Whatisthedifferencebetweenastaticandanon-staticinitializationcodeblock 538 Whycan'tIdefineastaticmethodinaJavainterface? 214 Shouldprivatehelpermethodsbestaticiftheycanbestatic 1023 Whentousestaticmethods 3859 ProperusecasesforAndroidUserManager.isUserAGoat()? 853 WhatistheequivalentofJavastaticmethodsinKotlin? HotNetworkQuestions Where'sthe'centaurofmass'? Egyptianfractionrepresentationsof1 Isthemarketpriceobjective? Whatistheconnectionbetweenmechanicsandelectrodynamicsthatmakesitnecessaryforbothofthesetoobeythesameprincipleofrelativity? Whyisthisplanestrugglingtogainaltitude? HowshouldIfollowupwiththisprofessor? Isitconfirmedastowhoattackedthesettlement? HowcanaScrumdailynotbeastatuspull? Whenanobjectcrossesablackholeeventhorizon,doestheentireobjectcrosstheeventhorizon"allatonce?" GolfConway'sPrimordialStill-Life Isitreallysafetopasssensitivedatatoanotherscriptviastdin,comparedtopassingviaarguments(Linux) HowtoremovetheredundantContourLabels HowcanIhaveanoptimisticpositivefactioninacyberpunkstyleworld? Whataspectscontributemosttomebeingslowonthisbike? Isitlegaltodescribesomethingexactlyas"cheese"withoutasterisksorotherqualificationifitdoesn'tcontainanydairy? Dospellswithoptionsstackwhendifferentoptionsarechosen? EliminatingVariablesinSemidefiniteProgramsUsingEqualityConstraints Recursivepalindromes Howdoisay“holdthebus?” Howcanagiganticcreaturecombatneurallag? Whatdoestheoutputofgcc--versionmean CouldIwritea"ParryHotter"novel? Whichpartof2001takesplacein2001? Meaningof"tappedontheshoulder" morehotquestions Questionfeed SubscribetoRSS Questionfeed TosubscribetothisRSSfeed,copyandpastethisURLintoyourRSSreader. lang-java Yourprivacy Byclicking“Acceptallcookies”,youagreeStackExchangecanstorecookiesonyourdeviceanddiscloseinformationinaccordancewithourCookiePolicy. Acceptallcookies Customizesettings  



請為這篇文章評分?