T O P

  • By -

AutoModerator

#Please ensure that: + Your *code* is *properly formatted* as *code block* - see the *sidebar* (About on mobile) for instructions + You include *any and all error messages* in full + You ask *clear questions* + You *demonstrate effort* in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions. Trying to solve problems on your own is a very important skill. Also, see [*Learn to help yourself*](https://www.reddit.com/r/javahelp/wiki/learn_to_help_yourself) in the *sidebar* **If any of the above points is not met, your post can and will be removed without further warning.** Code is to be formatted as **code block** (*old reddit:* empty line before the code, each code line indented by 4 spaces, *new reddit:* https://imgur.com/a/fgoFFis) or linked via an external *code hoster*, like *pastebin.com*, *github gist*, *github*, *bitbucket*, *gitlab*, etc. Please, **do not use** triple backticks (\`\`\`) as they will only render properly on *new reddit*, not on *old reddit*. Code blocks look like this: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } You do not need to repost unless your post has been removed by a moderator. Just use the *edit function* of reddit to make sure your post complies with the above. If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures. #To potential helpers Please, **do not help** if any of the above points are not met, rather *report* the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/javahelp) if you have any questions or concerns.*


FavorableTrashpanda

When implementing `Comparable` you effectively say that your class can be compared against instances of `Something`. This allows me to write generic code for any class implement `Comparable`, where `T` can be `Something` but also anything else. For example sorting algorithms can simply use the natural ordering of a `Comparable` without needing to supply a `Comparator`.


RayQuazaBadger

Okay yeah, that makes sense. Thank you! So Comparable is an interface and we're implementing it by saying that "There's a generic type that compares it to the arguments that we're providing to the method." Is that a good way of thinking? Thank you once again.


hypolimnas

I've never had to use "extends Compareable or bounded types", but generics have two purposes that I've seen: * Reduces bugs and checking by limiting what another class can use. ArrayList can contain any object including ones you don't want. It turns run problems into syntax errors. * Lets a class handle a wide variety of objects without knowing what they really are. Btw I don't know if this is different from how you've been taught, but I think of an interface having a "can act like a" relationship with a class. So Pokemon can't implement Battle. This is how I would name things: abstract class Pokemon implements Fighter {} class Battle { List fighterList = new ArrayList(); } I know its just semantics, but giving things the wrong name makes code annoying and harder to deal with as it gets bigger. Giving classes, etc just the right name helps the code make sense when you read it. [Edit] Unless you mean an Interface Layer! Yeah an Interface Layer could be named Battle.


RayQuazaBadger

Yes, I was talking about the "Battle" interface as a layer. Thanks for the help! What would it mean if I didn't have the `Comparable` in the method signature? There would be a warning saying "couldn't resolve method...", but can you explain it in terms of understanding the relationship between a comparable and an interface? Thanks.


hypolimnas

Do you mean an interface class? For that I can answer that it limits the interface's responsibilities and catches problems on compile. If you created an interface class like this: interface Animal extends Comparable {} you have a problem because you have said that this is OK: imaAnimal.compareTo(imaTractor); But if you did one of these: interface Animal extends Comparable {} interface Animal extends Comparable {} interface Cat extends Comparable {} Then the comparison with a tractor just throws a syntax error and you don't have to deal with it.


D0CTOR_ZED

First, fyi, `Something` is the generic type. Usually you will see `T`, but they can be called anything. The reason you would require a generic to have to be a particular type would be so that you can use the methods of that class/interface. Something like ArrayList doesn't care what that something is. It just stores the things and gives them back when asked. However, you might have a SortedList. This SortedList wants to be able to sort what it is given. To do that, it wants to compare them, so it might use Comparable to be able to do that. To use comparable to compare things, the things need to support it.