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