Nach Typ löschen, ist alles, was über T
bekannt ist, dass es eine Unterklasse von Object
ist. Sie müssen eine Factory angeben, um Instanzen von T
zu erstellen.
Ein Ansatz könnte ein Supplier<T>
verwenden:
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();
}
}
Verbrauch könnte wie folgt aussehen:
MyClass<StringBuilder> it = new MyClass<>(StringBuilder::new);
Alternativ können Sie bieten eine Class<T>
Objekt, und dann Reflexion verwenden.
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();
}
}
Welches Paket der 'Supplier' in ist? 'MyClass (Klasse extends T> impl)' muss deklarieren 'throws NoSuchMethodException' zum Kompilieren. Ihre Antwort ist leider nicht Java-freundlich. – user927387
@ user927387 'java.util.function.Supplier' – erickson