Frage

Meine Frage ist sehr ähnlich href="https://stackoverflow.com/questions/299998/instantiating-object-of-type-parameter"> diese Frage

public class myClass<E> {
    E someObject;

    public myClass(){
         someObject = new E();
    }
}

Bisherige Lösungen erforderlich, um den Konstruktor von myClass geändert werden, um eine Fabrik Parameter zu haben, und dann den Konstruktor davon zu nennen, aber für meine Zwecke Ich mag keine Anrufe myClass von außen ändern.

War es hilfreich?

Lösung

Das Problem ist, dass Sie nicht wissen, was E ist, noch wie es zu konstruieren. Es könnte jede Art sein (es ist allquantifizierte ). Sie müssen Beweise liefern, dass, was auch immer E ist, kann es wirklich gebaut werden. Eine „Fabrik“ eines bestimmten Typs dient als eine Art Zeugnis für die Tatsache, dass es kann.

über das Denken für eine zweite: Was passiert, wenn ich Void als Parameter E passieren? Wie würden Sie gehen über einen Wert vom Typ Void konstruieren?

Die Möglichkeit, E für alle E zu konstruieren würde wie etwas aus dem Nichts zu schaffen sein. Es ist eine logische Unmöglichkeit. ∀E. E ist ein unbewohnter Satz.

Was Sie wirklich wollen, ist entweder für E ein gebundenes zu haben oder einen Konstruktor (Fabrik) als Zeuge der Tatsache zu, daß E in dem Satz von konstruierbaren Objekten ist.

Andere Tipps

Nein, wie in den Antworten auf die verknüpfte Frage erklärt, Sie können das nicht tun. Ändern Sie die Schnittstelle in einem Factory-Objekt zu übergeben. (NB:. Class macht ein schlechtes Werk)

Sie wissen, dass Ihr Code nicht funktioniert, und Sie werden eine Lösung mit einer nahe genug Syntax erwartet.

Wie wäre das?

//doesn't work. cannot make x.someObject a new String()
//MyClass<String> x = new MyClass<String>();

//this can work...
MyClass<String> x = MyClass.neu(String.class);

public class MyClass<E>
{
    static public <T> MyClass<T> neu(Class<T> clazz){...}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top