Jump to content

Recommended Posts

Posted

Boas,

Estou com uma dúvida de Java. Já andei às voltas com isto e não encontro uma solução "limpa". Pensei em deixar aqui a duvida.

Estou a trabalhar num projecto um tanto complexo e estou a implementar uma classe.

Nessa classe eu recebo um vector estático de objectos

public static final Parameter[] parameters = new Parameter[2];

Point is, este vector tem de ser final e tem de ser estático senão o programa estoura.

O problema é que posso receber n parametros para preencher o vector. Alterar o vector para um ArrayList não é uma hipotese.

A unica soluçao que encontrei foi usar um Realloc, mas ao usar isto,

parameters = a.JRealloc(parameters);

Ele não aceita porque a variável é final.

A minha dúvida. Será possível contornar esta questão de alguma forma ou tenho mesmo de criar o vector com um numero monstruoso e tratá-lo assim?

“The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.”(Seymour Cray)

Posted

Final significa que é constante, logo não podes alterar o valor. Static significa que é uma propriedade da classe e não da instância.

Aquilo que pretendes fazer não é compatível com o final, logo a solução é retirares essa keyword do código.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted

Point is, este vector tem de ser final e tem de ser estático senão o programa estoura.

mas tens código que não é teu que deves seguir e não podes alterar ? é que o uso de static com o final é a mesma coisa que ter valores constantes globais.

não necessitam de estar associados a uma instância da classe onde foram declarados e não os podes alterar:


public Class A
{
public static final int Var1 = 10; // podes aceder sempre mas nunca podes alterar o valor
public static int Var2 = 20; // podes aceder sempre e podes alterar o valor
public int Var3 = 30; // necessitas de uma instância da classe A ao qual o valor está associado
}
[/Code]
IRC : sim, é algo que ainda existe >> #p@p
Posted

Se calhar não fui claro quanto a essa parte. O código que tenho é de um trabalho já iniciado por outros colegas e passado para mim e outros. Posso de facto alterar de modo a que o vector não seja final... mas nesse caso o programa não vai funcionar porque noutras situações é necessário que ele seja final.

Ou seja não tenho mesmo outra solução senão declarar o vector com muito espaço e tratar aquilo assim, esperando que não o excedam...

“The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.”(Seymour Cray)

Posted

A questão é que não está "mal". Simplesmente foi por esse metodo que eles decidiram seguir e não vou alterar tudo o que está para trás.

“The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.”(Seymour Cray)

Posted (edited)

Pois, mas também não podes atribuir um novo valor a uma variável final, pelo que vais ficar num impasse até decidires alterar o código.

Quais são as situações em que é necessário que a variável seja final?

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.