是否可以扩展字节数组?

时间:2014-05-25 02:33:57

标签: java

我正在为一个赋值实现AES,并希望封装检查一个键总是一个长度正好是16,24或32的字节数组的逻辑。

我可以创建一个包装类,在内部将字节存储为byte [],但我想知道是否可以扩展Array或类似的东西,这样我就不必重新实现Iterators,toString和其他方便的方法了我从使用Java数组开始。

即。是这样的可能吗?

public class Key extends Array<Byte>{

    // Valid length of key in bytes
    public static int[] possibleLengths = new int[]{ 16, 24, 32 };

    // Check if a given byte[] is a valid candidate for a key
    public static boolean isValidLength(byte[] input) {
        for (int length: possibleLengths) {
            if (input.length == length) return true;
        }
        return false;
    }

    // Primary constructor passes bytes directly to internal state
    public Key(byte[] input) throws InvalidKeyLengthException {
        if (!isValidLength(input))
            throw new InvalidKeyLengthException;

        setKey(input);
    }
}

3 个答案:

答案 0 :(得分:3)

嗯......没有。您无法扩展数组类型,因为it's dynamically generated在数组实例化时。

将此作为包装类(即Key)的字段会更有意义。

如果您担心必须使用辅助方法等,那么您可以简单地委派主要职责(即暴露数组并暴露出合理的toString())。

答案 1 :(得分:3)

不,不可能扩展数组类。

我相信可以扩展ArrayList,但这可能会让你足够接近你想要的东西。但是,您需要禁用ArrayList随意扩展其容量的能力。

那就是说,你应该遵循指南&#34;更喜欢继承聚合&#34;在这种情况下,只需使您的数组或ArrayList成为您班级中的一个字段。

答案 2 :(得分:1)

数组是一个奇怪的概念。它们确实有一些属性,比如长度,虽然它们不是类,所以你不能像尝试那样扩展它们。

您可以将其转换为ArrayList

new ArrayList<Byte>(Arrays.asList(Key))

所以,你可以创建一个扩展ArrayList的类,并添加你的新功能主义者。 然后将上述Byte Array转换为自定义类,并使用新扩展的方法自由检查您的要求!