Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
lav et lille java program.. får det til at lave en exception.. følge linjen og du kommer ind i sourcen til StringBuffer hehe kopi and paste.. ret den til.. hvis du kan!
1) Man kan komme ganske frygteligt galt af sted med at arve fra klasser som ikke er tiltænkt at skulle arve fra p.g.a. utilsigtet interaktion mellem implementationen i den oprindelige klasse og koden i den nye klasse
2) Jeg mener at Gosling ("opfinderen" af Java) blev spurgt hvilken feature i Java han fortrød mest og svaret var: extends. 50% vittigt + 50% dybt seriøst.
Faktisk undrer jeg mig lidt over, at f.eks. metoden substring() i StringBuffer-klassen returnerer en String og ikke en StringBuffer. Betyder det ikke, at der oprettes et nyt String-objekt ved hvert kald af substring()? (og dermed måske et hastighedsproblem ved mange gentagelser)
-> arne_v: Nej, men jeg forestiller mig at oprette en StringBuffer en gang for alle, hvorefter jeg genbruger denne løbende. Det er noget med en løkke, hvor jeg skriver til en fil, og i den forbindelse er jeg altid lidt bange for "new". Det er vel andet lige billigere at referere til samme StringBuffer hver gang i forhold til at oprette en ny ved hvert gennemløb.
-> arne_v: Vel ikke helt, hvis resultatet returneres i samme reference, således at der ikke oprettes et nyt objekt ved hvert gennemløb. Dette kan man med StringBuffer men ikke med String, som skal oprettes ny hver gang, da den er uforanderlig.
Den eneste måde hvorpå substring kunne undlade at create et nyt objekt var hvis den smed alt andet en substring væk i sig selv. Og det er da en ret grim side effect.
-> arne_v: Jeg tror måske, at vi snakker lidt forbi hinanden.
Min pointe er blot, at for så vidt der returneres en String fra substring()-metoden, vil denne altid være et nyt objekt, da String er uforanderlig. Dette er helt specielt for String's. For så vidt der blev returneret en StringBuffer i stedet, ville der ikke være behov for at danne et nyt objekt hver gang, og resultatet kunne lagres i et allerede eksisterende objekt. Ved mange gennemløb forestiller jeg mig, at det er relativt dyrt at returnere en String i forhold til en StringBuffer.
->arne_v: For så vidt enig. Dette vil være tilfældet, når man genbruger samme objekt, som du gør i eksemplet. Referencerne 'firsthalf' og 'lasthalf' peger på samme objekt, og ændringen vedr. lasthalf vil således også påvirke firsthalf, jf.:
Men konstruktionen er slet ikke tosset, hvis man f.eks. skal skrive til en fil. I denne situation er genbrug af objektet oplagt, idet "indholdet af" objektet løbende skrives ud til filen, hvorefter det er klar til genbrug osv. Her giver det god mening med genbrug, så man sparer tid med at oprette et nyt objekt ved hvert gennemløb. Denne mulighed har man imidlertid ikke med String, som oprettes på ny hver gang, derfor min bemærkning omkring returnering af StringBuffer i stedet.
Hvis "method overloading" på en eller anden måde inkluderede retur-objektet, ville man kunne operere med samme metode-kald men forskellige retur-objekter, dvs. substring() kunne returnere en String hhv. en StringBuffer afhængig af anvendelse. Bare en løs tanke.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.