Instantiating generic's parameter

generics, java

Solution

You were very close. You need to replace `Class<?>` (which means "a class of any type") with `Class<T>` (which means "a class of type T"):

public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException {
    return t.newInstance();
}

Problem

I'm learning Java's generic, I snag into some problem instantiating the type received from generic parameters (this is possible in C# though) ``` class Person { public static <T> T say() { return new T; // this has error } } ``` I tried this: generics in Java - instantiating T ``` public static <T> T say(Class<?> t) { return t.newInstance(); } ``` Error: ``` incompatible types found : capture#426 of ? required: T ``` That doesn't work. The following looks ok, but it entails instantiating some class, cannot be used on static method: Instantiating generics type in java ``` public class Abc<T> { public T getInstanceOfT(Class<T> aClass) { return aClass.newInstance(); } } ``` Is this the type erasure Java folks are saying? Is this the limitation of type erasure? What's the work-around to this problem?

Original source

Related problems