Java generics constraint require default constructor like C#

后端 未结 3 1043
一向
一向 2020-12-21 05:03

In C#, I can put a type constraint on a generic parameter that requires the generic type to have a default parameterless constructor. Can I do the same in Java?

In

3条回答
  •  天涯浪人
    2020-12-21 05:39

    Java does not do structural typing, so you cannot constrain T to have a particular constructor or static method. Only subtyping and supertyping restrictions are permitted.

    So, pass an appropriate abstract factory. Use of reflection here, or in virtually any case, is highly inappropriate. There is now a now a suitable generic JDK type for this in the form of java.util.function.Supplier.

    public static T someMethodThatDoesSomeStuff(
        Supplier factory
    ) {
    

    Invoke as:

    Donkey donkey = someMethodThatDoesSomeStuff(BigDonkey::new);

    (The method reference needn't be a constructor.)

提交回复
热议问题