java-对象初始化语法:someVar=(SomeClass[])对象[aVariable]
在下面的代码段中 什么是java-对象初始化语法:someVar=(SomeClass[])对象[aVariable],java,Java,在下面的代码段中 什么是keys=(Key[])新的可比较的[initCapacity]做什么 public class BinarySearchST<Key extends Comparable<Key>, Value> { private static final int INIT_SIZE = 8; private Value[] vals; // symbol table values private Key[] keys;
keys=(Key[])新的可比较的[initCapacity]代码>做什么
public class BinarySearchST<Key extends Comparable<Key>, Value> {
private static final int INIT_SIZE = 8;
private Value[] vals; // symbol table values
private Key[] keys; // symbol table keys
private int n = 0; // number of elements
public BinarySearchST() {
this(INIT_SIZE);
}
public BinarySearchST(int initCapacity) {
vals = (Value[]) new Object[initCapacity];
keys = (Key[]) new Comparable[initCapacity];
} ...
public类二进制搜索{
私有静态final int INIT_SIZE=8;
私有值[]VAL;//符号表值
私钥[]键;//符号表键
private int n=0;//元素数
公共二进制搜索{
这(初始大小);
}
公共二进制搜索ST(int initCapacity){
VAL=(值[])新对象[initCapacity];
键=(键[])新的可比[initCapacity];
} ...
您可以这样分解它:
初始化一个新对象
大小的数组initCapacity
Object [] someValues = new Object[initCapacity];
Comparable [] someComparable = new Comparable[initCapacity];
然后将数组类型转换为Value
vals = (Value[]) someValues;
keys = (Keys[]) someComparable;
您上面的语句是在单行上执行这些操作。
请记住,您已将VAL
声明为值数组
和键
声明为键数组
在本例中,键
是一种泛型类型。具体而言,它是扩展可比
的某种类型
由于类型擦除,无法创建泛型类型的数组,因此需要创建该泛型类型的超类型/接口数组。在这种情况下,我们知道Comparable
是泛型类型键的接口,因此在内存中创建Comparable
数组,然后将其转换为通用类型键
这里有更多的例子(也有类似的例子):
static T[]genericMethod(T someObj){
T[]arrayOfTypeT=(T[])新可比[1];
arrayOfTypeT[0]=someObj;
返回数组类型;
}
//字符串扩展为可比较的
公共静态void main(字符串[]args){
String[]arrayOfString=genericMethod(“字符串”);
整数[]arrayOfInt=genericMethod(新整数(1));
//这个不能编译,因为它不能扩展
Object[]ArrayOfoObject=genericMethod(新对象());
}
这可能会回答“x做什么?”但没有提到任何关于泛型类型的问题。我担心这个答案可能会让人们误以为他们可以将正常类型的数组强制转换为子类型,例如整数[]iArr=(整数[])新数字[1]@xtratic你不能用一个答案教会人们所有的东西,你要为他们的问题提供具体的解释,否则会有超过数百行的答案,他们有这方面的书籍。我关心的不是用一个答案教所有的东西,而是要避免让不是Java v的人感到困惑避免混淆的唯一方法就是强调“泛型类型值”和“泛型类型键”。这个问题专门询问了语法someVar=(SomeClass[])对象[aVariable]
。虽然我认为值得注意的是,该课程使用泛型类型,但我觉得它超出了范围。我同意泛型相关的某种程度的教育有助于理解问题中描述的整个代码。
static <T extends Comparable> T[] genericMethod(T someObj) {
T[] arrayOfTypeT = (T[]) new Comparable[1];
arrayOfTypeT[0] = someObj;
return arrayOfTypeT;
}
// String extends Comparable
public static void main(String[] args) {
String[] arrayOfString = genericMethod("A string");
Integer[] arrayOfInt = genericMethod(new Integer(1));
// this one doesn't compile, because it doesn't extend Comparable
Object[] arrayOfObject = genericMethod(new Object());
}