首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T型与[T]型的scala差异

T型与[T]型的scala差异
EN

Stack Overflow用户
提问于 2012-08-04 13:15:05
回答 1查看 3.8K关注 0票数 4

可能重复: Scala: Abstract Types vs Generics

按照我的理解,下面两个类的定义是相同的。那么,除了语法之外,还有什么不同呢?

代码语言:javascript
复制
abstract class Container[T] {}
class IntContainer extends Container[Int] {}

abstract class Container2 { type T }
class IntContainer2 extends Container2 { type T = Int }

当我查看反编译的字节码时,我注意到第一个集合仍然有泛型(尽管IntContainer被定义为具有类型对象:public class IntContainer extends Container<Object> )。第二组没有这类信息。我以为所有的通用类型都被删除了.

使用Scala2.10-M5的PS

EN

回答 1

Stack Overflow用户

发布于 2012-08-04 16:19:28

抽象类型和泛型之间有明显的区别,我们总是需要记住:

  • 如果类是泛型类型,则同一类的多个实例可能具有不同的泛型类型。
  • 如果一个具体的类作为抽象类型,对于给定的Scala类,该类的所有实例都将具有相同的抽象类型。

现在你应该清楚地知道,这两者可以以不同的方式使用:

  • 泛型主要是为必须充当容器的类或应该在给定目标上执行某些操作的业务类设计的。从这个意义上说,泛型参数允许您在编译时检查类型安全性。
  • 抽象类型主要用于在更高级别上定义行为或属性,并在子类化时对其进行细化。泛型与继承关系不大。

如果您查看另一个透视图,虽然将它作为参数传递给方法( GenericClassT和T )是一个常见的特性,但是设计一个接收ClassWithAbstractTypeT和classWithDigactType.T的方法要少见得多。事实上,除非路径相关的mehods是活动的(如果我没有错,默认情况下在2.10中是活动的),否则禁止编写类似Scala2.9中的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11808966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档