Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write a generic method in Java

Tags:

java

c#

generics

How to write a generic method in Java.

In C# I would do this

    public static T Resolve<T>()
    {
        return (T) new object();
    }

Whats the equivalent in Java?

like image 793
Dan Avatar asked Jun 06 '26 05:06

Dan


1 Answers

First, your C# example is wrong; it will throw an InvalidCastException unless typeof(T) == typeof(object). You can fix it by adding a constraint:

public static T Resolve<T>() where T : new() {
    return new T();
}

Now, this would be the equivalent syntax in Java (or, at least, as close as we can get):

public static <T> T Resolve() {
    return (T) new T();
}

Notice the double mention of T in the declaration: one is the T in <T> which parameterizes the method, and the second is the return type T.

Unfortunately, the above does not work in Java. Because of the way that Java generics are implemented runtime type information about T is not available and so the above gives a compile-time error. Now, you can work around this constraint like so:

public static <T> T Resolve(Class<T> c) {
    return c.newInstance();
}

Note the need to pass in T.class. This is known as a runtime type token. It is the idiomatic way of handling this situation.

like image 81
jason Avatar answered Jun 07 '26 19:06

jason



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!