Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-对象初始化语法:someVar=(SomeClass[])对象[aVariable]_Java - Fatal编程技术网

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());
}