Membro desde: 08/04/2009 10:11:20
Mensagens: 64
Offline
Ae pessoal duas duvidas pf
- Qual deve ser a classe do parametro obj do metodo invocarDraw da classe Prova?
- Quais serao as saidas da classe Prova?
class Shape {
String draw () {
return "Shape.draw().";
}}
class Rectangle extends Shape {
String draw () {
return super.draw() + "Rectangle.draw().";
}}
class Square extends Rectangle {
String draw () {
return super.draw() + "Square.draw().";
}}
class Circle extends Square {
String draw () {
return super.draw() + "Circle.draw().";
}}
class Triangle extends Circle {
String draw () {
return super.draw() + "Triangle.draw().";
}}
public class Prova{
private String invocarDraw(? obj) {
return obj.draw; }
public static void main ( String [] args) {
Prova prova = new Prova();
Shape shape = new Shape();
System.out.println(prova.invocarDraw(shape));
Shape shape = new Square();
System.out.println(prova.invocarDraw(shape));
Circle circle = new Circle();
System.out.println(prova.invocarDraw(circle));
}}
O seu código implementado corretamente, de acordo com o que você passou, seria:
Onde:
deve ser substituído por:
Nesse trecho é apresentada a forma correta de implementar esse método utilizando genérics. Quando usei
estava indicando que no meu método qualquer objeto que fosse uma subclasse de Shape seria aceito. Então usei o tipo T (poderia ser qualquer outra letra) para identificar o tipo e usá-lo dentro da classe. É claro que existem diversas particularidades sobre generics a serem estudadas, mas isso você consegue com algumas pesquisas (até rápidas).
Já que draw é um método é necessário invocá-lo corretamente e não usá-lo como se fosse um atributo. Assim esse seu método deve compilar normalmente. O mesmo resultado seria obtido caso o método fosse implementado da seguinte maneira:
Quanto ao resultado:
Obs. Não esqueça de usar a tag code quando for passar algum código.
Como você definiu que pode ser qualquer classe que estenda Shape, o compilador vai remover o tipo genérico (T no exemplo que te mostrei) e colocar Shape no lugar.