`
hitwangzhuo
  • 浏览: 33707 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

java不支持创建泛型数组(1)

阅读更多
1.new T[0]无法通过编译
2.泛型容器无法转化为泛型数组

下面是对第二点的测试:

GenericBlaBla.java

package com.kingdee.bos.blood;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class GenericBlaBla {
	//以list的形式返回map中的value
	public static  <T> List getList(Map<String,T> map){
		List list = new ArrayList<T>();
		list.addAll(map.values());
		return list;
	}
	//以array的形式返回map中的value
	public static  <T> T[] getArray(Map<String,T> map){//
		List list = getList(map);
		return (T[])list.toArray();
	}

}

class A{
	String a;

	A(String a) {
		this.a = a;
	}

	public String toString() {
		return a;
	}
	
	
}



GenericArrayTest.java

package com.kingdee.bos.blood;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

public class GenericArrayTest extends TestCase {
	private static Map<String,A> map = new HashMap<String, A>();

	protected void setUp() throws Exception {
		super.setUp();
		map.put("blood", new A("a handsome boy"));
	}

	public void testGetList() {
		try{
			List<A> list = (List<A>) GenericBlaBla.getList(map);
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
			System.out.println("java可以创建泛型List");

		}catch(Throwable t){
			System.out.println(t);
			t.printStackTrace();
			fail("java不可以创建泛型List");
		}
	}

	public void testGetArray() {
		try{
			A[] array = (A[]) GenericBlaBla.getArray(map);
			for (int i = 0; i < array.length; i++) {
				System.out.println(array[i]);
			}
			fail("java可以创建泛型Array");
		}catch(Throwable t){
			System.out.println(t);
			//t.printStackTrace();
			System.out.println("java不可以创建泛型Array");
		}
	}

}



测试用例运行效果如下:


  • 大小: 115 KB
分享到:
评论

相关推荐

    Java泛型_Java中的泛型结构_

    - 创建泛型数组需要特殊语法,如 `T[] array = (T[]) new Object[10];` - 由于类型擦除,泛型数组不能直接通过 `new T[10]` 创建,这会导致编译错误。 7. 泛型与多态: - 泛型类和泛型方法可以很好地与多态结合...

    java 用泛型参数类型构造数组详解及实例

    总之,虽然Java泛型不直接支持创建泛型数组,但通过反射API,我们可以动态地创建指定类型的数组。这种方法在处理不确定类型的场景下非常有用,但需要注意,反射API的使用应当谨慎,因为它可能会降低代码的性能,且...

    java 数组求和计算

    - **泛型数组**:Java 5引入了泛型,允许创建泛型数组以增强类型安全性。 - **数组操作函数**:Java的`Arrays`类提供了许多实用方法,如`sort()`排序数组,`equals()`比较数组内容,`copyOf()`复制数组等。 - **...

    java5泛型新特性 pdf

    7. **泛型数组**:Java不支持直接创建泛型数组,因为类型擦除会导致编译器无法检查数组元素类型。但是,可以通过类型转换间接创建,如`List[] stringLists = (List[]) new List[10];`,但这种操作存在潜在风险。 8....

    Java泛型总结(2)进阶篇

    创建泛型数组有一定的限制,因为类型擦除会导致潜在的类型不匹配问题。通常,我们应该避免直接创建泛型数组,而是使用集合框架,如ArrayList。 6. 泛型与多态 泛型与多态结合使用,可以实现更灵活且类型安全的...

    Java1.5泛型指南中文版

    创建泛型数组会引发警告,因为Java不允许创建这样的数组。 ### 8. Class Literals as Run-time Type Tokens #### Class对象作为运行时类型令牌 在Java中,`Class`对象可以作为运行时类型令牌使用。这意味着可以...

    java泛型指导(挺全的)

    由于类型擦除的存在,Java不支持创建泛型数组。因为编译器无法确定创建的具体类型,这会导致运行时错误。但是可以通过其他方式间接创建泛型数组,例如使用反射。 #### 10. 泛型与继承的关系 泛型与继承之间的关系...

    Java数组堆栈

    由于Java不支持直接创建泛型数组,所以声明数组为Object类型的,然后转型即可。 构造方法 ArrayStack类提供了一个无参构造方法,该方法创建一个空的泛型栈,大小为SIZE(默认为10)。在构造方法中,初始化了数组和...

    关于java基础的泛型的练习

    - 由于历史原因,Java不支持泛型数组的直接创建,如`new MyList[5]`是非法的。 - 可以通过类型安全的工厂方法或运行时转型解决这个问题。 通过以上知识点,我们可以看到Java泛型在编程中的重要性和灵活性。理解和...

    java数组练习与学习

    在Java中,无法直接创建泛型数组,但可以通过数组的组件类型创建非泛型数组,然后用泛型方法进行操作。 9. **数组作为方法参数**: 可以将数组作为方法参数传递,此时数组是按引用传递的,意味着方法内对数组的...

    Java-泛型.ppt

    因此,直接创建泛型数组是不可行的,但可以通过其他方式间接实现。 #### 七、泛型与反射 反射可以用来获取类的泛型信息,但这需要一定的技巧。Java反射API提供了获取泛型信息的方法,但需要注意的是,由于类型擦除...

    java【第4章:数组与方法】_Java新特性对数组的支持

    1. 泛型数组:自Java 5引入泛型以来,可以创建泛型类型的数组,这提高了代码的类型安全性和可读性。例如,`List[] stringLists = new List[5];` 2. 遍历增强:Java 5引入了for-each循环,简化了遍历数组的操作。...

    java泛型技术之发展

    - **泛型方法**:如Arrays.sort()可以接受泛型数组并进行排序。 5. **限制与注意事项** - **类型擦除**:泛型信息在运行时不可用,无法在运行时获取泛型类型。 - **不能实例化类型参数**:如 `new T()` 是不允许...

    accp5.0java第八章 数组

    9. **数组与泛型**:在Java泛型中,可以创建泛型数组,但不能直接创建类型参数的数组,如`T[] array = new T[10];`是不允许的。需要使用类型擦除的技巧或绕过此限制。 10. **内存管理**:Java的垃圾回收机制会自动...

    java数组资料

    在Java编程语言中,数组是一种重要的...通过深入研究和实践,可以掌握更多高级用法,如泛型数组、数组作为方法参数传递、数组的异常处理等。"在线课第2节_数组"可能进一步探讨这些话题,提供实例和练习,帮助加深理解。

    Java泛型学习【转自百度百科】

    1. 泛型与数组的不兼容:由于历史原因,Java不支持直接创建泛型数组,但可以通过反射等方式间接实现。 2. 等效的泛型数组创建方式:`Box[] boxArray = (Box[]) new Box[10];` 七、泛型与多态 1. 泛型与多态结合:...

    Java 基础(4-8) - 泛型机制详解.pdf

    5. **泛型数组**:虽然Java中不能直接创建泛型数组,但可以通过类型擦除后的原始类型创建,如`Number[] array = new Integer[10];`。 **深入理解泛型** 1. **类型擦除**:编译后,所有泛型信息都会被擦除,比如`...

    java泛型,java知识

    直接创建泛型数组是非法的,如`T[] array = new T[10];`,但可以通过反射或其他方式间接实现。 9. 类型推断 - 自JDK 7开始,Java引入了类型推断(Type Inference),使得在某些情况下可以省略类型参数,编译器会...

Global site tag (gtag.js) - Google Analytics