`
kakaxixp
  • 浏览: 6784 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

泛型应用的两个诀窍

    博客分类:
  • java
阅读更多
在泛型应用中得特别小心,否则会出现一些莫名奇妙的错误信息,例如

public interface Box<T>{
   public T get();
   public void put(T content);
}

在如下使用该接口时
public void dobox(Box<?> box){
   box.put(box.get());
}
该方法看上去可以运行,但实际上不行,编译器会提示(大概意思):"capture#453 of ? not being compatible with Object "
其中capture#453 of ? 是一个占位符,是编译器为该例通配符"?"指定的一个名字.

要使用好泛型,可以注意下面两个诀窍:
1、capture helper
针对dobox()方法可以这样修改一下:

public void dobox(Box<?> box){
   doboxHelper(box);
}

private<V> void doboxHelper(Box<V> box){
   box.put(box.get());
}
这样这段代码可以运行了,因为此时在doboxHelper()中,box.get()返回的类型不是Object,而是类型V

2、generic factory
一般在构造泛型实例时这样操作
Box<String> box= new Box<String>;
这违反了DRY原则(Don't Repeat Yourself ),从而可以这样修改一下:
public class BoxFactory<T> implements Box<T>{
   public static<T> Box<T> make(){
       return new BoxFactory<T>();
   }
   ......
}
在这里用到了编译器只能在泛型方法中进行推断类型参数的特性!先写到这里了!
3
2
分享到:
评论

相关推荐

    Java泛型应用实例

    例如,下面是一个简单的泛型方法,用于交换两个变量的值: ```java public static &lt;T&gt; void swap(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } ``` 在这个例子中,...

    java 带两个类型参数的泛型

    当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,它们接受不止一个类型作为参数。这样的设计可以让我们在不同数据类型之间建立更复杂的关联,同时保持类型安全。 首先,让...

    数据库SQL的泛型应用

    这个数据访问层可以被多个应用程序复用,从而减少重复的代码和提高开发效率。 SQL的泛型应用还涉及到动态SQL的使用。动态SQL是指在程序运行时构建SQL语句,它具有极大的灵活性。虽然动态SQL的构建和使用比静态SQL...

    c# 泛型应用实例

    `IComparer&lt;T&gt;`定义了一个比较两个`T`类型对象的方法,这样我们就可以实现这个接口,为不同类型的对象提供比较逻辑。 3. **泛型方法**:在类或接口中,我们还可以定义泛型方法。例如,`Swap(ref T a, ref T b)`是一...

    C#中的集合与泛型应用实例

    在C#编程语言中,集合和泛型是两个非常重要的概念,它们在开发高效、可维护的代码中扮演着核心角色。本篇文章将深入探讨这两个主题,并通过实例演示其应用场景。 首先,我们来理解什么是集合。在C#中,集合是一组...

    Java源代码带两个类型参数的泛型的应用.rar

    "Java源代码带两个类型参数的泛型的应用.rar"这个压缩包文件很可能包含了若干示例,展示了如何在实际开发中利用泛型处理具有两种不同类型的数据。以下是对这种泛型应用的详细说明: **1. 泛型基本概念** 泛型是Java...

    java泛型的应用

    自定义泛型类也是泛型的一个重要应用,允许我们为自己的类和接口添加类型参数,以确保它们在操作数据时遵循特定的类型规则。自定义泛型类时,需要在类名后面的尖括号`&lt;&gt;`中声明类型参数,然后在类的方法或成员中使用...

    泛型集合应用(dictionary<obj,obj>)

    本文将深入探讨“泛型集合应用——Dictionary, Obj&gt;”这一主题,揭示其在实际开发中的广泛应用。 首先,我们来了解什么是泛型。泛型是.NET框架的一个核心特性,它允许我们在编写代码时定义类型参数,这些参数可以在...

    泛型实际应用(简介)

    - 约束可以用于多个条件:例如同时实现两个接口或继承自某个类。 - 约束可以是接口、基类或特定的类型。 - 约束可以用来实现更复杂的功能,比如对泛型参数进行类型检查等。 - **构造函数约束**: - 示例:创建...

    枚举和泛型的应用举例

    枚举(Enum)和泛型(Generic)是Java编程语言中的两种强大特性,它们极大地提升了代码的可读性、安全性和复用性。本篇文章将深入探讨这两种概念及其在实际应用中的示例。 首先,我们来看枚举。枚举是一种预定义的...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    下面的例子展示了一个返回两个参数最大值的泛型方法: ```csharp public static T MaxValue(T a, T b) where T : IComparable { if (a.CompareTo(b) &gt; 0) return a; else return b; } ``` 泛型接口则定义了...

    WCF中应用泛型

    ### WCF中应用泛型 #### 一、泛型概念的理解与重要性 在软件开发领域,特别是面向对象编程中,泛型是一种重要的编程技术,它允许开发者编写一种类型的代码来处理不同的数据类型,从而提高了代码的复用性和灵活性。...

    浅谈c# 泛型类的应用

    C#中的泛型类是编程中的一个重要概念,它允许我们创建可以处理多种数据类型的类,提高了代码的重用性和效率。下面将详细讲解泛型类的各个方面。 1. **泛型类的基本应用** 泛型类的核心在于类型参数,这使得类能够...

    泛型集合泛型集合泛型集合

    泛型最常见的应用是创建泛型集合类,如`List&lt;T&gt;`。在C#中,`System.Collections.Generic`命名空间提供了多个泛型集合类,如`List&lt;T&gt;`、`Dictionary, TValue&gt;`等,它们替代了早期的非泛型集合,如`ArrayList`和`...

    泛型应用及静态页面生成事例

    在IT行业中,泛型(Generics)和静态页面生成是两个重要的概念,它们分别涉及到编程效率和网站性能优化。下面将详细阐述这两个知识点,并结合实际案例进行解析。 **泛型** 泛型是Java、C#等面向对象语言中的一个...

    Java泛型应用:数组反转技术与代码实现

    在Java中,泛型可以应用于类、接口、方法等多个层面,从而实现类型安全的集合,泛型方法,以及泛型类等。泛型的存在使得程序员可以编写更通用的代码,这些代码不依赖于具体的类型信息,增强了代码的复用性,并降低了...

    C++f 泛型编程应用实例

    函数模板则可以生成处理多种类型的函数,例如,`swap`函数就是一个通用的交换两个变量值的函数。 模板特化是在特定类型上对泛型进行定制,以提供更优化的实现。例如,对于某些基本类型,我们可能会写出专门的特化...

    泛型dao 泛型dao 泛型dao

    3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...

    华科java实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

    C__泛型的运用

    ### C# 泛型的应用详解 #### 一、泛型的概念 在C#中,泛型是一种能够编写灵活且类型安全代码的强大工具。通过使用泛型,开发人员可以在不牺牲性能的情况下实现代码重用。简单来说,泛型允许开发者创建可以处理多种...

Global site tag (gtag.js) - Google Analytics