在main上序列化泛型类型

时间:2012-10-29 12:44:21

标签: java serialization

请我将几种类型的数组序列化为kwon内存最差的数据。所以我创建了一个序列化泛型类型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 

如何将通用变量设为静态并运行我的程序?

2 个答案:

答案 0 :(得分:2)

您可以遵循此方法

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

由于

答案 1 :(得分:1)

什么是泛型?我想你想要

 static int calcul(Serializable a) throws IOException;

你应该在之后使用的长度来刷新并关闭流。

为了回答你原来的问题,你可以对原始和包装的ArrayLists和数组的内存要求进行计算(并在这里阅读)(但实验也应该具有指导性。)