Après l'effacement du type, tout ce que l'on sait sur T
est qu'il s'agit d'une sous-classe de Object
. Vous devez spécifier une fabrique pour créer des instances de T
.
Une approche pourrait utiliser un Supplier<T>
:
class MyClass<T> {
private final Supplier<? extends T> ctor;
private T field;
MyClass(Supplier<? extends T> ctor) {
this.ctor = Objects.requireNonNull(ctor);
}
public void myMethod() {
field = ctor.get();
}
}
Utilisation pourrait ressembler à ceci:
MyClass<StringBuilder> it = new MyClass<>(StringBuilder::new);
Vous pouvez fournir un objet Class<T>
, et ensuite utiliser la réflexion.
class MyClass<T> {
private final Constructor<? extends T> ctor;
private T field;
MyClass(Class<? extends T> impl) throws NoSuchMethodException {
this.ctor = impl.getConstructor();
}
public void myMethod() throws Exception {
field = ctor.newInstance();
}
}
Quel package le 'Supplier' est situé dans? 'MyClass (Classe extends T> impl)' doit déclarer 'throws NoSuchMethodException' à compiler. Votre réponse n'est malheureusement pas favorable à Java débutant. – user927387
@ user927387 'java.util.function.Supplier' – erickson