`
韩悠悠
  • 浏览: 839844 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

泛型讨论------泛型接口

阅读更多

泛型也可以用于接口,例如生成器,这是一种专门负责创意对象的类。实际上是工厂方法设计模式的一种应用。不同的是它不需要任何参数。

 

一般一个生成器只定义一个方法,该方法用于产生新的 对象。

 

例子:

 

public interface Generator<T> { T next(); } 

 

辅助类:

 

public class Coffee {
  private static long counter = 0;
  private final long id = counter++;
  public String toString() {
    return getClass().getSimpleName() + " " + id;
  }
}

public class Latte extends Coffee {} 

public class Mocha extends Coffee {} 

public class Americano extends Coffee {}

 

 实现Generator<Coffer>接口,它能够随机生产不同类型的Offee对象

 

 

public class CoffeeGenerator
implements Generator<Coffee>, Iterable<Coffee> {
  private Class[] types = { Latte.class, Mocha.class,
    Cappuccino.class, Americano.class, Breve.class, };
  private static Random rand = new Random(47);
  public CoffeeGenerator() {}
  // For iteration:
  private int size = 0;
  public CoffeeGenerator(int sz) { size = sz; }	
  public Coffee next() {
    try {
      return (Coffee)
        types[rand.nextInt(types.length)].newInstance();
      // Report programmer errors at run time:
    } catch(Exception e) {
      throw new RuntimeException(e);
    }
  }
  class CoffeeIterator implements Iterator<Coffee> {
    int count = size;
    public boolean hasNext() { return count > 0; }
    public Coffee next() {
      count--;
      return CoffeeGenerator.this.next();
    }
    public void remove() { // Not implemented
      throw new UnsupportedOperationException();
    }
  };	
  public Iterator<Coffee> iterator() {
    return new CoffeeIterator();
  }
  public static void main(String[] args) {
    CoffeeGenerator gen = new CoffeeGenerator();
    for(int i = 0; i < 5; i++)
      System.out.println(gen.next());
    for(Coffee c : new CoffeeGenerator(5))
      System.out.println(c);
  }
} 

 

 

参数化的Generator接口确保next()方法的返回值是参数的类型,

分享到:
评论

相关推荐

    TypeScript的泛型接口 泛型类接口.zip

    接下来,我们讨论泛型类接口。泛型类接口与泛型接口类似,但是它定义了一个泛型类的行为,而不是一个对象的结构。这通常用于定义类的继承关系或者为类的方法提供类型检查。下面是一个例子: ```typescript ...

    JAVA学习笔试(数据基础+泛型编程)-适合小白

    本笔记主要涵盖了数据基础和泛型编程两大主题,同时也涉及到类和对象、数据类型、类的初始化和加载以及单例模式等多个知识点。 1. **数据基础** - **形参实参的使用**:在函数调用时,形参是方法定义中的参数,而...

    (PDF)C#入门经典.0002

    - 泛型接口 - 泛型约束 #### 8. LINQ - 查询表达式语法 - 方法语法 - LINQ to Objects与LINQ to SQL #### 9. 命名空间与程序集 - 命名空间的作用 - 程序集的概念与管理 #### 10. 高级主题简介 - Lambda表达式 - ...

    深入解析C#中的泛型类与泛型接口

    接下来,我们讨论泛型接口。泛型接口与泛型类类似,但它们定义了一组方法,而不是实现。它们允许其他类或结构遵循一组特定的合同,而不必知道具体的数据类型。例如,`IEnumerable&lt;T&gt;`接口定义了迭代器的行为,可以...

    C# 泛型的好处讲解

    通过上述讨论,我们可以看到C#中的泛型不仅提供了类型安全性,还极大地提高了代码的重用性和性能。无论是对于简单的数据结构还是复杂的业务逻辑,泛型都能帮助开发者写出更简洁、高效和可靠的代码。希望本文能够帮助...

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

    这个实例185可能是进一步讨论泛型数组类如何应用于实际项目,例如作为缓存、队列或其他数据结构的基础,或者作为工具类帮助处理不同类型的数据集。标签中的"源码"表明可能有具体的代码实现供学习,而"工具"可能意味...

    泛型和方法

    首先,泛型是Java 5引入的一项重要特性,它允许在类、接口和方法中使用类型参数,从而实现泛型类和泛型方法。泛型的主要目标是提供编译时类型检查,防止在集合中存储不兼容的数据类型,避免了强制类型转换的麻烦和...

    xe7结构体泛型

    - **协变和逆变**:在某些情况下,可以允许泛型接口或委托具有协变或逆变性,从而增强其兼容性。 - **默认实现**:有时我们可能希望为泛型结构体提供默认的行为,比如空值检查或默认初始化。 总结起来,xe7结构体...

    Java泛型实例

    接下来,我们讨论泛型接口。泛型接口与泛型类相似,只是它们定义在接口中。例如,我们可以定义一个泛型的比较接口: ```java public interface Comparator&lt;T&gt; { int compare(T o1, T o2); } ``` 这个接口可以用于...

    Asp.Net 泛型 三层

    - 数据访问接口:定义泛型接口,声明对数据库的操作,如添加、删除、更新和查询。 - 数据访问实现:实现数据访问接口,具体操作数据库,可能使用Entity Framework或其他ORM工具。 - 业务逻辑类:使用泛型创建业务类...

    java泛型学习全面页面下载资料

    1. **泛型的基本概念**:解释了泛型是什么,以及如何通过使用尖括号`&lt;&gt;`来定义泛型类、泛型接口和泛型方法。 2. **类型参数**:介绍如何定义类型参数,例如`E`、`T`、`K`、`V`等,以及它们在泛型类和泛型方法中的...

    [Java泛型和集合].

    本资料主要基于Maurice Naftalin和Philip Wadler合著的《Java泛型和集合》进行讨论。 首先,我们要理解什么是泛型。在Java中,泛型是一种在类、接口和方法中引入类型参数的技术。它们允许我们在编写代码时指定一个...

    泛型ref代码

    2. 泛型接口和方法:除了泛型类,我们还可以定义泛型接口和方法,让接口和方法能够处理不同类型的参数。 3. 多态性:泛型提供了编译时的多态性,这意味着我们可以使用相同的方法或类处理不同类型的数据,而无需进行...

    .net C# 泛型事件委托

    泛型是C# 2.0引入的一个重要特性,它允许开发者在定义类、接口、方法和委托时声明类型参数,这样在实例化时可以指定具体的类型,从而提高了代码的灵活性和重用性。通过使用泛型,我们可以避免类型转换的麻烦,减少...

    8.7泛型容器代码.zip

    泛型是Java 5引入的一个重要特性,它允许在类、接口和方法中使用类型参数,从而增强了代码的类型安全性。通过使用泛型,我们可以在编译时就检测到可能的类型错误,而不是在运行时发现。例如,`List&lt;String&gt;` 就是一...

    java 继承泛型类示例

    在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和安全性。当我们谈论“继承泛型类”时,这意味着一个类(子类)正在扩展一个已经定义了泛型的类(父类)...

    Java中泛型的各种使用

    下面将详细讨论Java中泛型的使用及相关知识点。 1. 泛型的基本概念 泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法中使用类型参数。类型参数类似于函数参数,但它们代表的是类型而不是值。例如,`List&lt;T&gt;`...

    泛型知识总结

    接下来,我们要讨论泛型的原理。泛型的本质是类型擦除,这意味着在编译后的字节码中,所有的类型参数都会被替换为它们的边界类型(通常是`Object`)。然而,编译器会插入强制类型转换和检查,以确保在运行时的类型...

    java 基于泛型与反射的通用 DAO

    泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和可读性。在`BaseDao.java`中,可能会定义一个泛型基类,如: ```java public abstract class BaseDao&lt;T&gt; { public...

    枚举和泛型的应用举例

    接下来,我们讨论泛型。泛型是Java SE 5.0引入的新特性,它允许在定义类、接口和方法时使用类型参数,以实现参数化类型。这样做的好处在于可以在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了...

Global site tag (gtag.js) - Google Analytics