当前位置: 首页 > 面试题库 >

调用print时发生错误(列表 a,T b)具有不同的T类

常飞翼
2023-03-14
问题内容

我试图学习Java泛型,并发现以下代码。

public static <T> void print(T a, T b){
    System.out.println(a);
    System.out.println(b);
}

public static void main(String[] args){
    print(new ArrayList<String>(), 1);
}

哪个没有问题。

但是,当我将print方法更改为以下内容时,它给了我编译错误。

public static <T> void print(List<T> a, T b){
    System.out.println(a);
    System.out.println(b);
}

错误:

GenericTest.java:9: error: method print in class GenericTest cannot be applied to given types;
  print(new ArrayList<String>(), 1);
    ^
  required: List<T>,T
  found: ArrayList<String>,int
  reason: no instance(s) of type variable(s) T exist so that argument type int conforms to formal parameter type T
  where T is a type-variable:
    T extends Object declared in method <T>print(List<T>,T)
1 error

谁能帮助我了解错误?


问题答案:

您应该了解的第一件事是,使用以下方法签名

public static <T> void print(T a, T b)

双方T 必须 是同一类型,也就是既ab将具有相同infered类型。

那么,为什么它的工作new ArrayList<String>()1?因为这两个参数实际上可以表示为Serializable,这是最近的公用超类型ArrayListInteger

  • ArrayList实现Serializable接口。
  • 1可以装进一个盒子Integer,也可以Serializable

因此,在这种情况下,编译器将推断TSerializable

在第二种情况下,带有签名

public static <T> void print(List<T> a, T b)

没有通用的超级类型TList<String>和均有效IntegerString和两者Integer都是对的Serializable,但是由于泛型不是多态的,所以它不起作用。



 类似资料:
  • 下面的错误会不时弹出,但并不总是在同一个地方。不太清楚为什么。有线索吗?这里的完整代码:完整代码 文件“/users/davidkasapchuk/pycharmprojects/test/homedepotfridges.py”,第257行,在price=item.find_element_by_class_name('product-display-price')文件“/library/fra

  • 问题内容: 我只是在查看List接口中定义的方法: ,我有一个问题。为什么是通用的?因此,方法不是完全类型安全的。以下代码片段可编译但会导致: 在我看来,如果toArray不是通用的并且采用List类型参数,那会更好。 我已经写了玩具示例,没有通用就可以了: 有什么理由可以这样声明? 问题答案: 从javadocs: 与toArray()方法一样,此方法充当基于数组的API和基于集合的API之间的

  • 问题内容: 我正在使用ajax加载数据并在DataTable中动态生成列名。我的数据表具有不同的列数,具体取决于用户的选择。(有一个下拉列表)。 例如,下拉列表中有2个选项,即“ 南部省” 和“ 北部省” 。 南部省 表有4列, 北部省 表有6列。 场景1 第一个用户选择具有4列的 Southern Province 。然后它生成的表没有错误,但是在此之后,如果用户选择具有6列的 Northern

  • 问题内容: 在SQL中,将行复制到另一个(备份)表中。如果备份表具有不同的结构(或不同的列名称),这可能吗?如果没有,实现此目标的最佳方法是什么? 这是我想做的:具有columns 。我想将一些行从该表复制到另一个具有column的表。内容进入,对等 问题答案: 该 列名 不事可言,只要该 数据类型 相匹配。 如果列的数据类型不匹配,请尝试相应地强制转换值。 只需尝试 使用小的虚拟表。确保明确列出

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 在调用ANT目标时,我得到以下错误。我尽了最大的努力来解决这个问题,但没有。 [junitreport]正在处理D:\checkouts\guiinstaller\tests-capsinstallertest-suites.xml到D:\checkouts\guiunit.build.junit.report\junit-nof[junitreport]加载样式表jar:file:/d:/che