Primeiramente obrigado a todos que responderam… aprendi algumas coisas que nao sabia nem que era possível fazer…
O meu objetivo pra isso é meramente informativo, na verdade a duvida surgiu quando tive que criar um combobox que iria guardar varios produtos, sendo que nesse combobox não deveria ser mostrado o toString padrão do produto que retornava somente seu nome, e sim que mostrasse o nome e também a unidade de medida.
Estava pensando em fazer algo usando interfaces, funcionou e não precisei implementar quase nada, creio que pro meu caso seria o melhor jeito, algo assim:
Classe produto:
package testes;
public class Produto {
private String nome;
private StringReturn stringReturn;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public StringReturn getStringReturn() {
return stringReturn;
}
public void setStringReturn(StringReturn stringReturn) {
this.stringReturn = stringReturn;
}
@Override
public String toString() {
if(stringReturn==null){//retorno padrão, caso nao exista um stringReturn especifico
return nome;
}else{//retorna o método da interface
return stringReturn.getString();
}
}
}
Interface usada pra retornar uma string
package testes;
public interface StringReturn {
public String getString();
}
Um exemplo de utilização:
Produto p1 = new Produto();
p1.setNome("Abacaxi explosivo");
System.out.println(p1);
final Produto p2 = new Produto();
p2.setStringReturn(new StringReturn() {
@Override
public String getString() {
return "Esse eh o retorno personalizado do produto "+p2.getNome();
}
});
p2.setNome("Laranja mecânica");
System.out.println(p2);
p2.setNome("Laranja elétrica");
System.out.println(p2);
Poderia tambem ao invés de usar interface, usar classe abstrata e fazer o método construtor dela receber um objeto, ai não precisaria declarar as variaveis como final.