För den som programmerar C#.NET så finns det något som heter Extension methods, men motsvarande funktionalitet saknas i Java, men däremot med Scala, så kan man t.ex. skriva följande kod, som om de två fetstilta metoderna nedan vore definierade på klassen 'java.lang.String'.
val sentenceWithWords = "My name is Tomas. What is your name?"
assertEquals(classOf[java.lang.String], sentenceWithWords.getClass())// proves that the above String indeed became typed as a java.lang.String
val firstTwoWordsWithUppercasedFirstLetter = sentenceWithWords.getFirstWordsIncludingIntermediateCharacters(2).getWithFirstLetterInEachWordUppercasedAndTheRestLowercased()
assertEquals("My Name", firstTwoWordsWithUppercasedFirstLetter)
Motsvarande java-kod skulle i stället se ut ungefär som de procedurella metod-anropen nedan med String-instansen som parameter:
final String firstTwoWordsWithUppercasedFirstLetter = SentenceUtility.getWithFirstLetterInEachWordUppercasedAndTheRestLowercased(
SentenceUtility.getFirstWordsIncludingIntermediateCharacters(sentenceWithWords, 2)
);
// alternativt så här, m.h.a. static import av metoderna i klassen 'SentenceUtility':
final String firstTwoWordsWithUppercasedFirstLetter = getWithFirstLetterInEachWordUppercasedAndTheRestLowercased(
getFirstWordsIncludingIntermediateCharacters(sentenceWithWords, 2)
);
På websidan som länkas nedan finns mer detaljerad källkod (och kommentarer på engelska) för ovanstående exempel.
Your Scala code can extend existing classes with implicit conversions
/ Tomas Johansson, 2010-01-19