FAQ: Generics: Lesson - Interfaces

This community-built FAQ covers the “Interfaces” exercise from the lesson “Generics: Lesson”.

Paths and Courses
This exercise can be found in the following Codecademy content:

[BETA] Learn Intermediate Java

FAQs on the exercise Interfaces

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in Language Help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

for the 4th section of the exercise:
(Let’s create some references to our generic interfaces and output some data to the terminal…)

my answer:
Container containerRetriever = new Container<>(myNumber);
Book bookRetriever = new Book(bookName);

provided solution:
Retriever containerRetriever = new Container<>(myNumber);
Retriever bookRetriever = new Book(bookName);

My solution yields desired results, but i am wondering if it’s correct or not. Thank you for your time.

1 Like

I hardly take anything in from this course so far (unlike with the Learn Java course). What is creating a “new Retriever”? It’s not a regular class, it’s an interface that simply allows your to “inherit” empty methods from it (I’d like to add that it has never been clearly explained by Codecademy why one may need any interfaces in the first place, let alone generic ones). Why is an interface now used to create objects all of a sudden? Folks at Codecademy, you should definitely rewrite the Learn Intermediate Java course from scratch, it’s a disgrace, frankly (not to mention silly mistakes like “it’s” instead of “its”, etc.)


hah :slight_smile: You are not alone. Feeling exactly the same way.
Why would I implement interface if rewrite it?
The program seem perfectly works without this.

And yeah, This is first time when interfaces being explaned

I cannot say yet, that the course need to be rewritten. Serialization was okay, I finished my project after that.
But with Interfaces I am frustrated :slight_smile: Hope it will be understood later

This course is correct. I would rate this higher than the second step after a first course in Java and the basics of Interfaces and Object-Oriented Principles as prerequisite.
I struggle to get the jargon correct when I explain Java, I will try though:
The reason to assign the object to Interface is a Polymorphism utility: since only the retrieveData method is called, it turns out only the Retriever Interface methods are used.
What can happen with this design pattern is that you could later change the instantiated object to be a different class that also implements Retriever (with the same generic type) and the rest of the code would stay the same; thus getting us the Object-Oriented GAINZ of open-closed principle in a Java container-framework like Spring: only the dependency is updated and the Autowired classes are “closed” to updates.

TL;DR Polymorphism and Open-Closed principle are why to use Interfaces this way.

I struggle to simplify my answer and that is why I chalk this up to difficulty: this is really advanced usage of Interface.
As usual, codecademy is introducing difficult subjects with correct best-practices and highlighting some simple parts for us to memorize: learning about placing the generic syntax correcly which is being carefully explained.

int myNumber = 24;
not supposed to be a generic/wrapper, in this case “Integer myNumber = 24”, to be a passed to Container generic class. As this was taught in the previous chapter

Retriever containerRetriever = new Container<>(myNumber);

Very surprised code compiled and passed.

Yeah I had the same solution and I believe it gets the correct result. But in the instructions they specifically asked us to create two Retriever instances. What I don’t like is that they didn’t give any instructions for how the output should be formatted but the solution requires us to format it in a particular way.

Yes I am also dissapointed that they didn’t explain interfaces earlier.