Array类型参数的相同曝光

时间:2017-08-09 05:03:56

标签: java

首先对不起,如果标题错了,我是java的新手。 我想创建方法,如果输入是一个对象的类,那么它的yield是对象,但如果输入是对象的Array类,那么它的yield数组对象。 public final static< T extends BaseClass> T fromJson(String json,Class<?extends BaseClass> klas)抛出JsonSyntaxException {     return(T)GSON.fromJson(json,klas); } public final static< T extends BaseClass> T [] fromJson(String json,Class<?extends BaseClass []> klas)抛出JsonSyntaxException {     return(T [])GSON.fromJson(json,klas); } 所以用法是: BaseClass r = fromJson(" {}",BaseClass.class); BaseClass [] r2 = fromJson(" {}",BaseClass [] .class); 但是编译器说两个方法都有相同的闭包,如何处理呢?

1 个答案:

答案 0 :(得分:0)

不幸的是,由于Type Erasure,编译为字节码的签名如下:

public final static BaseClass fromJson(String json, Class klas) throws JsonSyntaxException {
    return (BaseClass) GSON.fromJson(json, klas);
}

public final static BaseClass[] fromJson(String json, Class klas) throws JsonSyntaxException {
    return (BaseClass[]) GSON.fromJson(json, klas);
}

如您所见,签名实际上是相同的。

您真正做的最好的方法是将这些方法中的一个或两个重命名为不同的名称。