我试图学习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
必须 是同一类型,也就是既a
和b
将具有相同infered类型。
那么,为什么它的工作new ArrayList<String>()
和1
?因为这两个参数实际上可以表示为Serializable
,这是最近的公用超类型ArrayList
和Integer
:
ArrayList
实现Serializable
接口。1
可以装进一个盒子Integer
,也可以Serializable
。因此,在这种情况下,编译器将推断T
为Serializable
。
在第二种情况下,带有签名
public static <T> void print(List<T> a, T b)
没有通用的超级类型T
对List<String>
和均有效Integer
。String
和两者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