Converter array -> Object -> Object[]

1 resposta
A

Pessoal, tenho o seguinte código (exemplo):

int[] a21 = {144, 44}; Object aa = a21;
(o código é bem mais complicado, mas deu para entender certo?)

Eu quero converter a var Object aa para Object[] com os valores do a21 (em int). Ou seja, eu quero isso:

Object[] object = {144, 44}; //OBS: 144 e 44 devem ser do tipo int pois a var a21 (que deu origem aos números) é do tipo int[]
Tentei usar:

Object[] object = (Object[]) aa;

Não funciona! Tentei assim então:

int[] object = (int[]) aa;

aí funcionou, mas tem um problema. Eu NUNCA sei qual é o tipo de dado da var a21 (pode ser int, double, String, etc.). Eu poderia criar o código que pega o tipo de dado da array e converter para o tipo específico, depois converte para Object[], o problema é que para fazer isso eu preciso criar um código para CADA tipo de dado (int, double, etc.), e isso é uma merd*.

Dúvida:
não tem alguma maneira mais fácil de fazer a conversão para Object[] validando os argumentos abaixo:

apenas usando a var aa
não sabendo o tipo de dado da array a21
não sabendo o tamanho (length) da array a21?

Obrigado! :thumbup:

1 Resposta

juno.rr

Olá,
uma idéia é usar generics:

public class ArrayTest
{

  public static <T> Object toObject(T[] ts)
  {
    return (Object) ts;
  }

  public static <T> Object[] toArray(Object o)
  {
    Object[] os = (T[]) o;
    return os;
  }

  public static void print(Object[] os)
  {
    System.out.println("[Array] : size="+ os.length);
    System.out.print(" { ");
    for(Object o : os)
      if(o != os[os.length-1])
        System.out.print(o.toString() + ", ");
      else
        System.out.println(o.toString() + " }");
  }

  public static void print(Object o)
  {
    System.out.println("[Object] : "+ o);
  }

  public static void main(String[] args)
  {
    Integer[] is = { 144, 44 };
    print(is);
    Object o = toObject(is);
    print(o);
    Object[] os = toArray(o);
    print(os);
  }

}

Saída:

[Array] : size=2
 { 144, 44 }
[Object] : [Ljava.lang.Integer;@19821f
[Array] : size=2
 { 144, 44 }
Criado 9 de agosto de 2010
Ultima resposta 9 de ago. de 2010
Respostas 1
Participantes 2