`
dickyzhu
  • 浏览: 111755 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

泛型创建类型数组

 
阅读更多

方法一:创建一个显式的工厂对象,获得编译检查。

package com.cognizant.ch15;

interface FactoryI<T>{
T create();
}
class Foo2<T>{
private T x;
public <F extends FactoryI<T>> Foo2(F factory){
x=factory.create();
}
}
class IntegerFactory implements FactoryI<Integer>{
public Integer create(){
return new Integer(10);
}
}
class Widget {

public static class Factory implements FactoryI<Widget>{
public Widget create(){
return new Widget();
}
}
}
public class FactoryConstraint {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Foo2<Integer>(new IntegerFactory());
new Foo2<Widget>(new Widget.Factory());
}

}

方法二:模版方法设计模式

package com.cognizant.ch15;

abstract class GenericWithCreate<T> {
final T element;

GenericWithCreate() {
element = create();
}

abstract T create();
}

class X {
}

class Creator extends GenericWithCreate<X> {
X create() {
return new X();
}

void f() {
System.out.println(element.getClass().getSimpleName());
}
}

public class CreatorGenetic {
public static void main(String[] args){
Creator c= new Creator();
c.f();
}
}
output:X

分享到:
评论

相关推荐

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

    在Java编程语言中,"java不支持创建泛型数组(1)"这个标题揭示了一个重要的概念,即Java不直接允许我们创建带有类型参数的泛型数组。这是因为Java的泛型是类型擦除的,这意味着在编译后,所有的泛型信息都会被移除,...

    泛型集合与数组应用老师找学生

    泛型集合是C#中的一个特性,允许我们创建类型安全的集合类,如List、Dictionary, TValue&gt;等。这里的"T"或"TKey", "TValue"就是泛型参数,代表了集合中元素的类型。使用泛型集合的优点在于它能够在编译时避免类型转换...

    Java 泛型总结(二):泛型与数组

    Java 泛型总结(二):泛型与数组 Java 中泛型数组的关系确实有些复杂,不允许直接创建泛型数组...Java 中不允许直接创建泛型数组,但可以定义泛型数组的引用,并使用类型擦除的数组,然后转型来实现泛型数组的功能。

    泛型自定义数组大小

    通过泛型,我们可以创建具有特定类型的数组或集合,而无需在运行时进行强制类型转换。 1. **泛型的理解**: 泛型是一种允许在声明类、接口和方法时使用类型参数的机制。这种参数化类型可以让我们在编写代码时就...

    实例185 - 自定义泛型化数组类

    "实例185 - 自定义泛型化数组类"是一个关于如何创建和使用自定义泛型数组类的示例,这个主题将深入探讨泛型、数组以及两者的结合。 首先,我们需要理解泛型的基本概念。泛型是Java 5引入的一个重要特性,它允许我们...

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

    然而,泛型在某些特定情况下存在限制,比如直接使用泛型类型创建数组。本文将深入探讨如何在Java中使用泛型参数类型构造数组,并通过实例解析这个问题。 首先,我们需要理解Java泛型的基本概念。泛型是在类、接口和...

    java泛型数组

    然而,在 Java 中创建泛型数组却并非直截了当,这是因为 Java 的类型擦除机制导致泛型信息在运行时丢失。本文将深入探讨如何在 Java 中创建泛型数组,并通过具体的示例来理解其中的关键概念。 #### 二、Java 泛型...

    Delphi泛型动态数组的扩展.3.rar

    总的来说,"Delphi泛型动态数组的扩展"这个主题涉及到利用泛型来增强动态数组的灵活性和功能,通过编写泛型类或函数,我们可以创建更强大、更适应多种数据类型的工具。这些工具在处理数据操作、系统监控和底层系统...

    c#实现对泛型数组排序

    在C#编程中,泛型是一种强大的特性,它允许我们创建可重用的代码,这些代码可以处理多种数据类型。泛型数组的排序是常见的编程任务,尤其在处理大量数据时,高效且类型安全的排序至关重要。本文将深入探讨如何在C#中...

    JDK 5.0中的泛型类型学习.docx

    这样做会导致类型安全问题,因为在运行时可以将不兼容的泛型类型数组赋值给其他类型的数组。不过,可以使用未绑定的通配符如new List[3]来创建数组,但这只是一种妥协的解决方案,因为数组元素的实际类型在编译时是...

    C# 泛型数组学习小结

    这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList&lt;T&gt; 接口不能用于在数组中添加或移除元素;如果试图在此上下文中调用 IList&lt;T&gt; 方法(如数组的 ...

    数组,泛型,字典表,哈希表的用法

    4. **List**:泛型列表是.NET框架中提供的一种泛型集合,它允许我们创建特定类型的列表,从而避免了类型转换的麻烦。例如,如果我们有一个名为`Student`的类,我们可以创建一个`List&lt;Student&gt;`:`List&lt;Student&gt; stu ...

    C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换

    通过使用泛型,可以创建参数化的类型,这意味着在类、接口或方法中可以使用类型参数来指定具体的类型。这有助于避免重复代码,并提供了更好的性能。 在给定的代码片段中,主要展示了如何定义一个泛型类以及如何在类...

    C#泛型集合使用实例

    在C#编程语言中,泛型集合是一种强大的工具,它允许开发者创建类型安全的数据结构,无需显式地指定存储的数据类型。泛型集合提供了一种高效且灵活的方式来处理各种类型的数据,同时保持了编译时的类型检查。下面将...

    Java泛型_Java中的泛型结构_

    - 由于类型擦除,泛型数组不能直接通过 `new T[10]` 创建,这会导致编译错误。 7. 泛型与多态: - 泛型类和泛型方法可以很好地与多态结合,如 `List&lt;? extends Animal&gt;` 可以接受 `Dog` 和 `Cat` 的列表。 - ...

    Java泛型总结(2)进阶篇

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

    java泛型详解

    泛型的使用还有其一些限制,如泛型类型参数不能被实例化,不能创建泛型类型的数组,不能创建泛型类型的实例,不能使用instanceof检查和类型转换泛型类型参数。 Java泛型的另一特性是桥接方法。因为类型擦除,有时...

    Delphi_2009_2010_XE_泛型使用全集(队_栈_字典_列表_对象列表)

    通过使用泛型,我们可以创建能够处理各种数据类型的类或函数,这不仅提高了代码的灵活性,还增强了其复用性。 #### 二、队列(`TQueue`) 队列是一种先进先出(FIFO)的数据结构。在 Delphi 中,`Generics....

    泛型实例详解

    正确的方式是先创建非泛型数组,然后通过类型转换赋值给泛型引用: ```java List[] stringLists = (List[]) new List[]{new ArrayList()}; ``` 通过上述实例,我们可以了解到泛型在提高代码安全性和可读性方面...

    gson解析泛型和将泛型转为json字符串

    当我们需要从JSON字符串反序列化到泛型类型时,可以创建一个泛型类型的`Gson`对象或使用`fromJson()`方法。例如,如果你有一个泛型列表`List&lt;T&gt;`,你可以这样做: ```java Type listType = new TypeToken...

Global site tag (gtag.js) - Google Analytics