我正在为一个赋值实现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);
}
}
答案 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
转换为自定义类,并使用新扩展的方法自由检查您的要求!