0

いくつかのタイプのアレイをシリアル化して、メモリで最悪のものを見つけてください。だから私はジェネリック型をシリアル化する関数を作成し、int calcul(T a)それはintのサイズを返します。

public class NewClass<T> {
    public static void main(String[] args) throws IOException {
       byte[] tabByte = new byte[56666];
       Byte[] tabByte2 = new Byte[56666];
       int[] tabInt = new int[56666];
       ArrayList<Byte> arr=new ArrayList<Byte>(56666);  

       System.out.println("size array byte[]"+calcul(tabByte));
       System.out.println("size array Byte[]"+calcul(tabByte2));
       System.out.println("size array int[]"+calcul(tabInt));
       System.out.println("size array ArrayList<Byte>"+calcul(arr));
    }


    static int calcul(T a) throws IOException {
        ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
        ObjectOutputStream stream = new ObjectOutputStream(byteOutput);
        stream.writeObject(a);
        int a =  byteOutput.toByteArray().length;
        stream.flush();
        stream.close();
        byteOutput.flush();
        byteOutput.close();    

        return a;
    }

}

しかし、私はこのエラーがあります

non-static type variable T cannot be referenced from a static context 

ジェネリック変数を静的にしてプログラムを実行するにはどうすればよいですか?

4

2 に答える 2

2

あなたはこのアプローチに従うことができます

static int calcul(T extends Serialazable a) throws IOException;

ありがとう

于 2012-10-29T12:50:55.800 に答える
1

ジェネリックは何のためにありますか?私はあなたが欲しいと思います

 static int calcul(Serializable a) throws IOException;

そして、ストリームをフラッシュして閉じた、長さを取る必要があります。

そして、元の質問に答えるために、プリミティブでラップされたArrayListsと配列のメモリ要件について計算を行う(そしてここで読む)ことができます(ただし、実験も有益である必要があります)。

于 2012-10-29T12:46:59.207 に答える