【问题标题】:Interfaces vs Generics?接口与泛型?
【发布时间】:2012-07-15 04:56:42
【问题描述】:

我有一些工作代码,使用泛型开始使代码看起来比应有的更混乱。

我是否有可能取消泛型并为成员类型、构造函数类型、方法参数类型和方法返回类型使用接口?

泛型会提供什么,而上述使用接口不会提供什么?我知道泛型在检索元素时会进行编译时检查(以停止错误的转换——就像过去一样),但是如果我尝试插入不是所需接口的子类型的类型,编译器不会检测到吗?

【问题讨论】:

  • 您能否发布一个代码示例,让我们了解您在做什么?
  • 你的问题听起来很混乱。通常,您在完全不同的场景中使用泛型和接口。
  • @Keppil- 代码太大。我真的不使用很多收藏品。我打算将泛型用于包含成员对象的复合对象。泛型的唯一用途是在检索成员对象时?
  • 那么泛型会提供哪些使用我的接口方法不会提供的东西?

标签: java generics interface


【解决方案1】:

泛型使集合的类型更安全

如果在您的工作代码中广泛使用集合,我会更喜欢坚持使用 泛型。

此外,正如臭名昭著的谚语所说,“程序在接口中,而不是在实现中”,接口更注重灵活性而不是类型安全。

泛型也用于类、方法、接口、变量、构造函数。等等……

查看这些链接了解更多详情:

http://en.wikipedia.org/wiki/Generics_in_Java

http://www.oracle.com/technetwork/articles/javase/generics-136597.html

【讨论】:

  • 集合过去和现在都是泛型的主要用例。这并不意味着它们是泛型被添加到 Java 中的唯一原因。
  • 也可以用于类、方法、接口、变量、构造函数。等等……
  • @Ben 请在oracle.com/technetwork/articles/javase/generics-136597.htmlThe Need for Generics The motivation for adding generics to the Java programming language stems from the lack of information about a collection's element type, the need for developers to keep track of what type of elements collections contain, and the need for casts all over the place. 看到此段
  • 那么使用接口不能完全提供泛型可以做什么?我不需要用我的界面方法投射任何东西。
  • 我说如果你的代码中有很多集合,最好使用泛型。我更喜欢在需要对象扮演不同角色的地方使用接口。
【解决方案2】:

接口始终向所有人宣布一个类必须如何表现。另一方面,类型参数(泛型)让客户端决定类在特定实例中的行为方式。

类型参数允许类仅使用一组方法和字段处理一系列对象类型,并提供编译时检查以确保每个特定实例仅使用指定的类型,从而使类成为通用类.

如果您尝试使用接口提供这种灵活性,您将不得不编写相同方法和类的多个版本,其中每个版本的功能基本相同,但具有不同的显式类型。这会很无聊(会导致剪切和粘贴错误)而且很庞大,根本不需要添加任何东西。

通用语法看起来有点古怪,但您很快就会习惯,所以不要让尖括号最初的丑陋阻止您利用强大的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多