繁体   English   中英

Java中的通用方法未返回预期的类型

[英]Generic method in java not returning the type expected

我创建了一个通用方法toList():

public static <T> List<T> toList(T... args){
        List<T> list = new ArrayList<T>();
        for (T t : args) {
            list.add(t);
        }

        if(list instanceof Comparable<?>){
            System.out.println("The list was considered a list of Comparable objects");
        }
        if(list instanceof Serializable){
            System.out.println("The list was considered a list of Serializable objects");
        }
        if(list instanceof Object){
            System.out.println("The list was considered a list of Object class' objects");
        }
        return list;
    }

我正在像这样调用此方法:

    public static void main(String[] args) {

        System.out.println(Generics.<Comparable>toList(1,2,"3"));
  }

我期待着因为我已经提供了Comparable类型,所以第一个if条件将为true,而o / p将首先为Comparable,然后是Object。 但是令我惊讶的是,如果并且o / p是Serializable然后是Object,则控件没有首先进入。

任何人都可以阐明其背后的原因吗? 我也不清楚在访问修饰符之后在方法签名中应用T的概念。

我们已经提到了访问说明符,修饰符和返回类型。 供应T有什么需要?

您正在对列表对象而不是对列表元素执行断言。

list instanceof Comparable<?>

仅当列表本身将实现Comparable接口时,才返回true 由于ArrayList是可序列化的,并且当然是对象,因此其他两个条件的评估结果为true

在我看来,您要尝试的是测试方法内部的元素类型T 由于类型擦除(遵循链接),您无法执行此操作。 T的实际类型仅在编译时才知道,而在运行时则不知道。 在运行时,在方法内部,Java只会认为TObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM