JAVA中,关于可变参数和泛型的问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中,关于可变参数和泛型的问题。相关的知识,希望对你有一定的参考价值。

在我的印象中,可变参数的数据类型应该是固定的,统一的。但是,如果我现在用一个泛型来表示其数据类型,发现传入的数据,可以使任意的,可以不统一。有int,有String,都可以。为什么呢?此时可变参数的数据类型是String么?那我要是传入的全部是Int,参数类型就是Integer么?
我找一段代码演示给大家看一下。
package se01;
public class Demo
public static void main(String args[])

print(setArry(1,"xxx",3.0,'a',5,6,7));

public static <T> T[] setArry(T...args)
T i=args[0];
return args;
T i=args[0];

public static <T> void print(T temp[])
public static <T> void print(T)

for(T t:temp)

System.out.print(t+"、");



此时的泛型T是什么类型?????
想用字符串连接符检测一下的,但是报错,说泛型T没有定义此方法

可变参数:
在java中要求实参和形参的数量和类型都必须逐一的匹配,形参的数目在定义方法的时候就被定下来了,虽然方法可以重载,但也不能达到让实参数量任意变化。
为了解决这个问题,我们可以定义一个数组型的参数调用时生成一个包含了所有要传递的实参的数组,然后将这个数组作为实参传递。
但是这样不够简便,简洁的写法是:形参类型与参数名之间加上连续的...
例如:public void findUser(String ...str)

泛型
定义一个泛型类: class Demo(E)
定义泛型方法:void test(E...e)
泛型用于规范类型如:List list=new ArrayList();那么就只能往list中放String类型的数据。
要注意的是泛型只能用类对象不能用简单类型。追问

额,我刚才没有完全打完。请现在再看一下问题补充。。。。

参考技术A 主义这里的方法定义:public static <T> T[] setArry(T...args)

这里的可变参数仅仅只是允许参数个数不固定(可变), 但是并不允许参数的数据类型可变!!
你在 调用的时候 参数全部传同一类型即可通过编译和运行。
例如:
print(setArry(“1”,“2”,“3”,“4”));本回答被提问者采纳

以上是关于JAVA中,关于可变参数和泛型的问题。的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板举例

Effective Java 第三版——32.合理地结合泛型和可变参数

javapoet添加泛型参数问题,怎么解决

java中的泛型的使用与理解

Java 泛型和可变参数

如何获取java泛型的参数类型