Java 如何创建未知类型的实例?

Java 如何创建未知类型的实例?,java,Java,我有两个函数需要精确的参数类型(akaT): 但我想知道是否有可能使代码更简洁,即 public void parse(int id) { UnknownType obj; switch (id) { case 1: { obj = new Integer(1); break; } case 2: { obj = new Double(2);

我有两个函数需要精确的参数类型(aka
T
):

但我想知道是否有可能使代码更简洁,即

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);
}
如果是这样的话,我应该放什么来代替
UnknownType

编辑:
1) 我使用了
Integer
Double
作为简化示例。在我的实际代码中,我使用自定义类。
2)我需要知道我的
doWork
函数中的确切类型(类),这样我就不能使用
对象


提前感谢用户为您的
obj
输入
号码
Integer
Double
都扩展了此类型

抽象类{@code Number}是平台的超类 表示可转换为 基元类型{@code byte}、{@code double}、{@code float}、{@code int}、{@code long}和{@code short}


如果您不想成为这样具体的对象,您可以始终使用
对象

为您的
对象
使用类型
编号
Integer
Double
都扩展了此类型

抽象类{@code Number}是平台的超类 表示可转换为 基元类型{@code byte}、{@code double}、{@code float}、{@code int}、{@code long}和{@code short}


如果您不想成为这样的具体对象,您可以始终使用
对象

您可以使用
数字
对象
,它们都是
整数
的常见超类型


但是,泛型是不必要的:

private <T> void doWork1(T _obj) {...}
擦除之后

输入参数具有类型变量的唯一要点是:

  • 您需要指出另一个输入参数的泛型需要关联,例如,您正在传递
    T\u obj
    List\u List

    请注意,您不需要
    t_obj1
    t_obj2
    的泛型类型-这会退化为
    t
    的上限(例如
    Object

  • 如果您需要它与返回类型相关:

    <T> T doWork1(T _obj) { ... }
    
    tdowork1(T_obj){…}
    

这里不需要任何一种情况,所以只需消除不必要的复杂情况。

您可以使用
Number
Object
,它们都是
Integer
Double
的常见超类型


但是,泛型是不必要的:

private <T> void doWork1(T _obj) {...}
擦除之后

输入参数具有类型变量的唯一要点是:

  • 您需要指出另一个输入参数的泛型需要关联,例如,您正在传递
    T\u obj
    List\u List

    请注意,您不需要
    t_obj1
    t_obj2
    的泛型类型-这会退化为
    t
    的上限(例如
    Object

  • 如果您需要它与返回类型相关:

    <T> T doWork1(T _obj) { ... }
    
    tdowork1(T_obj){…}
    

这里不需要任何一种情况,所以只需消除不必要的复杂情况。

如果doWork1接受object,请使用object。你的问题取决于doWork1的参数是如何构造的(重载的,或者只是一个函数)。@JFMeier确实如此,因为
T
是无界的。如果你需要知道方法中的确切类型,你需要将
Class
作为参数传递给方法。@AndyTurner,好的,在这种情况下,
UnknownType
如何?@StephanLeila它仍然可以是
Number
Object
。如果doWork1接受Object,则使用Object。你的问题取决于doWork1的参数是如何构造的(重载的,或者只是一个函数)。@JFMeier确实如此,因为
T
是无界的。如果你需要知道方法中的确切类型,你需要将
Class
作为参数传递给方法。@AndyTurner,好的,那么在这种情况下,
UnknownType
呢?@StephanLeila如果使用第一个示例,它仍然可以是
Number
Object
@StephanLeila如何知道
doWork
中的类型?如果使用第一个示例,StephanLeila如何知道
doWork
中的类型?谢谢澄清。是的,
Object
就可以了,非常感谢您的澄清。是的,
Object
就可以了,非常感谢
private void doWork1(Object _obj) {...}
<T> T doWork1(T _obj) { ... }