in Java syntax, Class<? extends Something>

JavaGenerics

Java Problem Overview


Class<? extends Something>

Here's my interpretation, it's class template but the class ? means the name of the class is undetermined and it extends the Something class.

if there's something wrong with my interpretation, let me know.

Java Solutions


Solution 1 - Java

There are a few confusing answers here so I will try and clear this up. You define a generic as such:

public class Foo<T> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

If you want a generic on Foo to always extend a class Bar you would declare it as such:

public class Foo<T extends Bar> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

The ? is used when you declare a variable.

Foo<? extends Bar>foo = getFoo();

OR

DoSomething(List<? extends Bar> listOfBarObjects) {
    //internals
}

Solution 2 - Java

You are almost right. Basically, Java has no concept of templates (C++ has). This is called generics. And this defines a generic class Class<> with the generics' attribute being any subclass of Something.

I suggest reading up "What are the differences between “generic” types in C++ and Java?" if you want to get the difference between templates and generics.

Solution 3 - Java

You're right

Definition is that the class has to be subtype of Something

It's the same as Class<T>, but there is a condition that T must extends Something Or implements Something as Anthony Accioly suggested

It can also be class Something itself

Solution 4 - Java

You're correct.

In Java generics, the ? operator means "any class". The extends keyword may be used to qualify that to "any class which extends/implements Something (or is Something).

Thus you have "the Class of some class, but that class must be or extend/implement Something".

Solution 5 - Java

You're correct.

However usually you will want to name the class that extends Something and write e.g. <E extends Something>. If you use ? you can't do anything with the given type later.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlilzzView Question on Stackoverflow
Solution 1 - JavaDaniel MosesView Answer on Stackoverflow
Solution 2 - JavaKrizzView Answer on Stackoverflow
Solution 3 - JavaJan VorcakView Answer on Stackoverflow
Solution 4 - JavaMacView Answer on Stackoverflow
Solution 5 - JavaThomas AhleView Answer on Stackoverflow