本篇文章给大家谈谈java泛型数组传参,以及java泛型参数怎么传入实参对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、java泛型完成数组问题,刚学泛型,求帮助2、JAVA怎么初始化泛型数组?3、Java编写一个泛型类,提供一个方法, 要求:给定任意的类型数组,将第0位和最大位置去掉,将数组返回?
java泛型完成数组问题,刚学泛型,求帮助
整数数组的顺序收缩
public static int seqSearch(int[] arr, int first, int last, int target) {
for (int i = first; i last; i++)
if (arr[i] == target)
return i;
return -1;
}
JAVA怎么初始化泛型数组?
首先由于Java泛型的实现,不可以使用如下的代码:
public class GenSetE {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
那么我们如何在保持类型安全的同时实现这一点?
我在Java论坛上看到了这样的解决方案:
import java.lang.reflect.Array;
class StackT {
public Stack(ClassT clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
在这里,我们需要讨论”checked” and “unchecked”。
Checked:strong typing。GenSet明确知道它包含的对象类型(即它的构造函数是使用Class E参数显式调用的,当方法传递非类型E的参数时,方法将抛出异常。请参阅Collections.checkedCollection。
在这种情况,我们需要这样写:
public class GenSetE {
private E[] a;
public GenSet(ClassE c, int s) {
// Use Array native method to create array
// of a type only known at run time
@SuppressWarnings(“unchecked”)
final E[] a = (E[]) Array.newInstance(c, s);
this.a = a;
}
E get(int i) {
return a[i];
}
}

Unchecked: weak typing。实际上没有对作为参数传递的任何对象进行类型检查。
在这种情况,我们需要这样写:
public class GenSetE {
private Object[] a;
public GenSet(int s) {
a = new Object[s];
}
E get(int i) {
@SuppressWarnings(“unchecked”)
final E e = (E) a[i];
return e;
}
}
请注意,数组的组件类型应该是类型参数的擦除:
public class GenSetE extends Foo { // E has an upper bound of Foo
private Foo[] a; // E erases to Foo, so use Foo[]
public GenSet(int s) {
a = new Foo[s];
}
…
}
所有的这些都源于Java中泛型一个的特性但也是一个weakness:它是使用擦除实现的,因此除非实施一些显式机制(type-checking),否则“泛型”类不知道它们在运行时创建的类型参数,故无法提供 type-safety。
Java编写一个泛型类,提供一个方法, 要求:给定任意的类型数组,将第0位和最大位置去掉,将数组返回?
package com.xxt.lyh;
import java.util.Arrays;
/**
* 测试类
*
* @author 时间在流
*
* @param TEV 泛型
*/
public class TestTEV {
// 这纯粹是为了用泛型而用,不用都更好。
/**
* 给定一个泛型数组,将数组中的第一个成员和最后一个成员去掉返回。
*
* @param srcArray 原数组,泛型
* @param destArray 存放结果的数组,泛型 如果你会反射的话,说不定可以不用这个参数 但我不知道你会不会,就写简单点吧
* @return 返回结果 其实这个都是多余的,但是为了满足你题目中的要求,我就再把第二个参数返回了
*/
public TEV[] trim(TEV[] srcArray, TEV[] destArray) {
try {
// 如果原数组的成员2,则将原数组除第一个成员和最后一个成员外的所有成员拷贝到目标数组,否则直接返回。
if (srcArray.length 2) {
System.arraycopy(srcArray, 1, destArray, 0, srcArray.length – 2);
}
} catch (Exception e) {
System.out.println(“目标数组长度不够”);
}
return destArray;
}
public static void main(String[] args) {
// 创建原数组。
String[] srcArray = { “a”, “b”, “c”, “d” };
// 创建目标数组。
String[] destArray = new String[2];
// 创建测试类进行测试。
Test test = new TestString();
String[] result = (String[]) test.trim(srcArray, destArray);
System.out.println(Arrays.toString(result));
}
}
java泛型数组传参的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java泛型参数怎么传入实参、java泛型数组传参的信息别忘了在本站进行查找喔。