Java interface and implementation naming (or “I” or “Impl”)

How do I name my interfaces and the classes that implement my interfaces? Through much research on the internet and my own gut feelings, this is what I reckon:

I never prefix my interfaces with “I”. The value of coding to interfaces is that you can swap out the implementation with minimal hassle. It means that instead of using implementation specific class names in your code, you use interface names instead – right? So, if I’m going to be using interface names everywhere, I don’t want to have to prefix everything with “I”. Coding to interfaces is a best practice, so I don’t need to explicitly state that I am doing it…It should just happen – which makes the “I” prefix redundant.

Furthermore, the “Impl” suffix is also redundant. Yes, indeed, your dilemma isn’t as simple as picking between the two. Firstly, “Impl” doesn’t translate. “Impl” in other languages has no meaning, and yes I’m talking about Polish and Scala. In Polish (according to Google translate), “implementation” is “realizacja” and in Scala, there are no interfaces. The closest thing Scala has to interfaces is traits, which can contain implementation specific code. So really, everything is Scala is an implementation, so why you use “Impl” suffix?

Secondly “Impl” is restrictive. What happens when you want to add another implementation of Foo? You gonna call it “FooImplImpl”? “AnotherFooImpl”? “FooImpl2″? I didn’t think so. Perhaps you were going to just call it “FooImpl” and put it in a different package…

Thirdly “Impl” doesn’t convey any meaning about what the implementation is. You wouldn’t create an “AnimalImpl” would you? You’d create a “Lion” or an “Elephant”. There is almost always something that distinguishes your implementation that you can use in the class name. Even if it is a long name, it doesn’t matter – you’re coding to interfaces (remember?), so you’re rarely going to see that class name.

Lastly, and probably most importantly – you still can’t think of a name? You don’t need an interface. If you really can’t think of a name, your class must be generic enough to not need an interface and you’re probably not going to have any other implementations. Your class methods become the interface contract, and that is that.

1,860 thoughts on “Java interface and implementation naming (or “I” or “Impl”)

  1. jakie kasyno online jest najlepsze п»їKasyno Online Polska gg poker opinie

  2. casino darmowe spiny za rejestracje Najlepsze Kasyna Online free casino slots

  3. Najszybciej wyplacajace kasyna w Polsce bonus bgc wiekkasyno z darmowa kasa na startgry ktГіre pЕ‚acД…darmowe spiny ggbetkod bonusowy superbet

  4. Najlepsze Kasyna Online kasyno paysafecard 20zЕ‚Е›mieszne gry karcianetotal casino forummystake promo codeautomaty online kasyno

  5. Najlepsze Kasyna Online automaty do gry za darmo sizzling hotslotoro bonus bez depozytu 2026promocje total casinofairspin casino no deposit bonusgry w maszyny za darmo

  6. Kasyno Bonus bez Depozytu za Rejestracje obstawiane przez graczy w ruletkef1 casino darmowe spinyreal life blackjack onlinemaszyny hazardowe online za pieniadzecasyno online pl

  7. п»їKasyno Online Polska ja nie jestem snaxlemon casino iogra jednoreki bandytamaszyny za pieniadzekasyno wplata sms

  8. п»їKasyno Online Polska kasyno online szybkie wyplatygry online casinokasyno bez depozytu polskajednoreki bandyta 777 za darmogry za paysafecard

  9. п»їKasyno Online Polska ggbet jak usunac kontopolska kasyno onlinebonus bez depozytu lemon casino50 zl za rejestracje bez depozytuggbet kod promocyjny bez depozytu

  10. Najlepsze kasyna internetowe gry hazardowe za darmo bez rejestracjikody do ice casinokasyno platnosc paypaltotal casino chatplay fortuna 100 free spins

  11. Najlepsze Kasyna Online bruno casino kod promocyjnykasyno z bonusem na start bez depozytu 2026kasyna bonusy bez depozytuice casino bonus coderoyal casino rzeszГіw

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>