当前位置:  开发笔记 > 编程语言 > 正文

Java本土增长的泛型示例

如何解决《Java本土增长的泛型示例》经验,为你挑选了1个好方法。

有人能指出我在Java中使用泛型的好例子吗?我是指自己写一个通用类的例子吗?

大多数解释都是"您可以定义这样的泛型类.现在请参阅Java Collections API并忘记所有这些 - 只需使用它并感到高兴."

我想要的更像是"你可以定义这样的泛型类,现在考虑一下你可能想要它的情况,现在让我们看看我们如何编写它."

谢谢.



1> Apocalisp..:

Java中的泛型有助于参数多态性.通过类型参数,您可以将参数传递给类型.就像一个方法,比如String foo(String s)模拟某些行为,不仅仅是针对特定的字符串,而是针对任何字符串s,所以类似于List某种行为的类型,不仅针对特定类型,而且适用于任何类型.List说,对于任何类型的T,存在ListT小号.所以List实际上是一个类型构造函数.它将一个类型作为参数,并构造另一个类型作为结果.

以下是我每天使用的泛型类型的几个示例.首先,一个非常有用的通用接口:

public interface F {
  public B f(A a);
}

这个接口表示对于任何两种类型,A并且B,有一个函数(被调用f)接受A并返回一个B.当你实现这个接口,A并且B可以是任何你想要的类型,只要你提供一个函数f,是以前者,并返回后者.这是接口的示例实现:

F intToString = new F() {
  public String f(int i) {
    return String.valueOf(i);
  }
}

在泛型之前,通过使用关键字进行子类化来实现多态性extends.使用泛型,我们实际上可以取消子类化并使用参数多态.例如,考虑用于计算任何类型的哈希码的参数化(通用)类.而不是重写Object.hashCode(),我们将使用这样的泛型类:

public final class Hash {
  private final F hashFunction;

  public Hash(final F f) {
    this.hashFunction = f;
  }

  public int hash(A a) {
    return hashFunction.f(a);
  }
}

这比使用继承更灵活,因为我们可以保持使用组合和参数多态的主题,而不会锁定脆弱的层次结构.

Java的泛型并不完美.例如,您可以抽象类型,但不能抽象类型构造函数.也就是说,您可以说"对于任何类型T",但您不能说"对于任何类型T采用类型参数A".

我在这里写了一篇关于Java泛型的这些限制的文章.

可以在此处找到许多有用的泛型类型的来源..如果还没有,请查看标准Java库的源代码.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有