Wie erstelle ich eine Instanz des unbekannten Typs?

Ich habe ein paar Funktionen, die einen genauen Argumenttyp erfordern (akaT):

private <T> void doWork1(T _obj) {...}
private <T> void doWork2(T _obj) {...}
private <T> void doWork3(T _obj) {...}

Ich benutze sie so und es funktioniert gut:

public void parse(int id) {
    switch (id) {
        case 1: {
            Integer obj = new Integer(1);
            doWork1(obj);
            doWork2(obj);
            doWork3(obj);
            break;
        }
        case 2: {
            Double obj = new Double(2);
            doWork1(obj);
            doWork2(obj);
            doWork3(obj);
            break;
        }
        case 3: {
            CustomClass obj = new CustomClass();
            doWork1(obj);
            doWork2(obj);
            doWork3(obj);
            break;
        }
    }
}

Aber ich habe mich gefragt, ob es möglich ist, den Code präziser zu gestalten, d. H.

public void parse(int id) {
    UnknownType obj;
    switch (id) {
        case 1: {
            obj = new Integer(1);
            break;
        }
        case 2: {
            obj = new Double(2);
            break;
        }
        case 3: {
            obj = new CustomClass();
            break;
        }
    }
    doWork1(obj);
    doWork2(obj);
    doWork3(obj);
}

Wenn ja, was soll ich anstelle von @ setzUnknownType?
Bearbeiten
1) Ich habe @ benutInteger undDouble als vereinfachtes Beispiel. In meinem aktuellen Code verwende ich benutzerdefinierte Klassen.
2) Ich muss den genauen Typ (Klasse) in meinem @ kenndoWork funktioniert also kann ich nicht @ verwendObject
Danke im Vorau

Antworten auf die Frage(4)

Ihre Antwort auf die Frage