[英]Is it possible to extend byte array?
我正在为分配实现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);
}
}
不,不可能扩展数组类。
我相信可以扩展ArrayList,但这可能使您足够接近所需的内容。 但是,您需要禁用ArrayList的能力以任意扩展其容量。
就是说,在这种情况下,您可能应该遵循准则“优先考虑聚合而不是继承”,并且只需将数组或ArrayList设置为类中的一个字段即可。
数组是一个奇怪的概念。 它们确实具有一些属性,例如length,尽管它们不是类,所以您不能像尝试那样扩展它们。
您可以将其转换为ArrayList
:
new ArrayList<Byte>(Arrays.asList(Key))
因此,您可以创建一个扩展ArrayList
的类,并向其中添加新的功能主义者。 然后将上述Byte
Array
转换为自定义类,并使用新扩展的方法自由检查您的要求!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.