Skip to content

Commit fc3ab24

Browse files
committed
Tutorials - Translation PT-BR - Generic Classes
1 parent e65353a commit fc3ab24

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
layout: tutorial
3+
title: Classes Genéricas
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 17
9+
tutorial-next: variances
10+
tutorial-previous: sequence-comprehensions
11+
language: pt-br
12+
---
13+
14+
Semelhante ao Java 5 (aka. [JDK 1.5](http://java.sun.com/j2se/1.5/)), Scala tem suporte nativo para classes parametrizadas com tipos. Essas classes genéricas são particularmente úteis para o desenvolvimento de classes collection.
15+
Aqui um exemplo que demonstra isso:
16+
17+
```tut
18+
class Stack[T] {
19+
var elems: List[T] = Nil
20+
def push(x: T) { elems = x :: elems }
21+
def top: T = elems.head
22+
def pop() { elems = elems.tail }
23+
}
24+
```
25+
26+
A classe `Stack` modela uma pila mutável que contém elementos de um tipo arbitrário `T`. Os parâmetros de tipo garantem que somente os elementos legais (que são do tipo `T`) são inseridos na pilha. Da mesma forma, com os parâmetros de tipo podemos expressar que o método `top` retorna somente elementos de um único tipo de dado, no caso, `T`.
27+
28+
Aqui mais alguns exemplo de uso:
29+
30+
```tut
31+
object GenericsTest extends App {
32+
val stack = new Stack[Int]
33+
stack.push(1)
34+
stack.push('a')
35+
println(stack.top)
36+
stack.pop()
37+
println(stack.top)
38+
}
39+
```
40+
41+
O saída do programa é:
42+
43+
```
44+
97
45+
1
46+
```
47+
_Nota: subtipos de tipos genéricos são *invariantes*. Isto significa que se tivermos uma pilha de caracteres do tipo `Stack [Char]` então não pode ser usado como uma pilha de inteiros do tipo `Stack [Int]`. Isso seria incorreto porque ele nos permitiria inserir inteiros verdadeiros na pilha de caracteres. Para concluir, `Stack [T]` é um subtipo de de `Stack [S]` se e somente se `S = T`. Como isso pode ser bastante restritivo, Scala oferece um [mecanismo de anotação de parâmetro de tipo](variances.html) para controlar o comportamento de subtipo de tipos genéricos._

0 commit comments

Comments
 (0)