Sobre Generic

Olá pessoal,

Qual o problema desse código:

[code]import java.util.ArrayList;

public class ArrayFlex {

private ArrayList <Tipo> aArray;
private int aLS;
private int aLI;
	

public ArrayFlex (int limiteSuperior, int limiteInferior) {
	aLS = limiteSuperior;
	aLI = limiteInferior;
	aArray = new ArrayList <Tipo> (aLS - aLI + 1);
}
	
	
public void setElemento (int pPosicao, Tipo pValor) {
	aArray[(pPosicao + aLI) - 1] = pValor;
}
	
	
public Tipo getElemento (int pPosicao) {
	return aArray[(pPosicao + aLI) - 1];
}

}[/code]

O erro dá nas linhas “aArray[(pPosicao + aLI) - 1] = pValor;” e “return aArray[(pPosicao + aLI) - 1];”

O ArrayList é uma classe, não um array primitivo.

Você não pode usar o operador[]. A declaração de seu generic também está fora das convenções de nomes, conforme explicado no The Generics Tutorial da Sun:

“A note on naming conventions. We recommend that you use pithy (single character if possible) yet evocative names for formal type parameters. It?s best to avoid lower case characters in those names, making it easy to distinguish formal type parameters from ordinary classes and interfaces.”

Seu código deveria se algo como:

[code]
import java.util.List;
import java.util.ArrayList;

public class ArrayFlex {

private List <T> aArray;
private int aLS;
private int aLI;
	

public ArrayFlex (int limiteSuperior, int limiteInferior) {
	aLS = limiteSuperior;
	aLI = limiteInferior;
	aArray = new ArrayList<T> (aLS - aLI + 1);
}
	
	
public void setElemento (int pPosicao, T pValor) {
	aArray.set((pPosicao + aLI) - 1, pValor);
}
	
	
public T getElemento (int pPosicao) {
	return aArray.get((pPosicao + aLI) - 1);
}

}[/code]

Outras dicas: Seu ArrayList não precisa ser pré-inicializado com um tamanho específico. Todo ArrayList cresce a medida que for necessário.

Sempre use listas através da interface List, como feito na declaração. Assim fica bem fácil trocar o seu código para um outro tipo de lista no futuro, se isso for necessário.

Curiosidade: Por acaso você programa em C#?
O problema está no fato de você estar tentando tratar um objeto do tipo ArrayList como se fosse um vetor. Em Java, somente vetores - ou expressões que retornem um vetor - podem ser seguidas do subscrito de vetor (O “[]” no caso).
Pelo que eu vi, a sua intenção é alterar o conteúdo de uma determinada posição do seu ArrayList. Para isso, essa classe provê o método set(int index, T element), que vai alterar trocar o elemento da posição index pelo elemento element passado por parâmetro. O elemento antigo é retornado por esse método. Só tome cuidado, porque se aArray.size() for zero ou se index estiver fora do intervalo [0; aArray.size()[, o método set lança um IndexOutOfBoundsException.

 	public void setElemento (int pPosicao, Tipo pValor) {
 		aArray.set(pPosicao + aLI - 1, pValor);
 	}

em generic vc so pode armazenar objetos os tipos primitivos nao objetos… é muito comum o cara confudir Integer com int. Mas sao completamente diferentes o primeiro é um objeto e o segundo(int) é simplesmente um tipo primitivo… o fato da confusão é que ja vi algumas linguaguens que para declarar um tipo primitivo usa integer e isso confude quando o cara vem para o java hehe. Mas lembre-se um conjunto sempre vai receber objetos…

.......
ArrayList<Integer> lista = new ArrayList<Integer>();
lista.add(80);
lista.add(44);
//funciona no java 5 - autoboxing

flw! :smiley:

Acho que o Camilo quis dizer algo parecido com isso: “em generic vc só pode armazenar objetos[size=18].[/size] Os tipos primitivos[size=18],[/size] não[size=18].[/size] [Somente] objetos…”
Tem coisas que só a pontuação faz por você… :lol:

mas eu disse isso mantu uhauh so que esqueci das pontuações apenas… ei saiu da prisao q vc?(sumiu do msn).

Valeu aí aos três, resolveram o meu problema. A minha próxima pergunta já seria essa mesmo, se ArrayList aceita tipos primitivos. Valeu! ^^

ps: não programo em C# não, C# funciona assim?

[quote=dm_thiago]Valeu aí aos três, resolveram o meu problema. A minha próxima pergunta já seria essa mesmo, se ArrayList aceita tipos primitivos. Valeu! ^^

ps: não programo em C# não, C# funciona assim?[/quote]
É bem por aí sim: