Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 将泛型复制到数组?_Java_Generics - Fatal编程技术网

Java 将泛型复制到数组?

Java 将泛型复制到数组?,java,generics,Java,Generics,任务说明如下: “您的任务是创建乘法器,该乘法器接收包含任何可复制内容的文件夹(即实现复制接口),并创建包含原始文件夹内容副本的文件夹数组。” 我试图找出如何将对象添加到数组中。然而,当我运行我编写的代码时,我得到的输出是null 如何将通用对象添加到数组中 import java.util.ArrayList; import java.util.List; /** * Class to work with */ class Multiplicator { public stati

任务说明如下: “您的任务是创建乘法器,该乘法器接收包含任何可复制内容的文件夹(即实现复制接口),并创建包含原始文件夹内容副本的文件夹数组。”

我试图找出如何将对象添加到数组中。然而,当我运行我编写的代码时,我得到的输出是null

如何将通用对象添加到数组中

import java.util.ArrayList;
import java.util.List;

/**
 * Class to work with
 */
class Multiplicator {
    public static <T extends Copy<T>> Folder<T>[] multiply(Folder<T> folder, int arraySize) {
        // Method to implement
        Folder myFolder = new Folder();
        Folder<T>[] folderArray = new Folder[arraySize];
        for (int i = 0; i < arraySize; i++) {
            folderArray[i] = (Folder<T>) myFolder.get();
        }
        return folderArray;
    }

    public static void main(String[] args) {
        System.out.println("Well done!");
    }

}

// Don't change the code below
interface Copy<T> {
    T copy();
}

class Folder<T> {

    private T item;

    public void put(T item) {
        this.item = item;
    }

    public T get() {
        return this.item;
    }
}

import java.util.ArrayList;
导入java.util.List;
/**
*与之共事的班级
*/
类乘法器{
公共静态文件夹[]倍增(文件夹文件夹,int数组化){
//实现方法
文件夹myFolder=新文件夹();
文件夹[]folderArray=新文件夹[arraySize];
for(int i=0;i
问题不在于如何创建泛型类型的新数组。事实上,您使用
新文件夹[arraySize]
正确地创建了
文件夹[]
。是的,有一个警告,但这是因为Java的类型系统中存在限制/缺陷

之所以全部为空,是因为您创建了一个空文件夹,
folder myFolder=new folder()
,并将其内容(
null
)放入数组(
folderArray[i]=(Folder)myFolder.get();

根据任务描述,您应该复制作为参数之一提供的文件夹的内容,
folder

public static <T extends Copy<T>> Folder<T>[] multiply(Folder<T> folder, int arraySize) {

    Folder<T>[] folderArray = new Folder[arraySize];

    // for arraySize times...
    for (int i = 0; i < arraySize; i++) {
        // create a new, empty folder
        Folder<T> newFolder = new Folder<>();
        // put the copy of the parameter folder's contents into the new folder
        newFolder.put(folder.get().copy());
        // put the new folder into the array
        folderArray[i] = newFolder;
    }
    return folderArray;
}
publicstaticfolder[]multiply(folderfolder,int-arraySize){
文件夹[]folderArray=新文件夹[arraySize];
//对于排列时间。。。
for(int i=0;i
您的
文件夹
实现与您提出的问题完全矛盾asked@ShyamBaitmangalkar我对泛型还是新手,但我想我应该创建一个文件夹对象,这样我就可以在我的Multiiplicator类中使用T泛型帮助器方法。谢谢。我是泛型新手,现在可以看到我应该创建Folder的实例,而不是Folder的对象。只是确认一下,当我实例化文件夹时,我能够访问与T相关联的类和接口中的方法?@RikoKurahashi“与
T相关联的
”是什么意思?您可以在此处访问
copy
,因为在方法签名中,据说
T extends copy
。很抱歉,我正在查看文件夹副本以及它如何链接到T extends copy。使用文件夹副本=新建文件夹();,这允许复制接口在使用T时工作?编辑:我将尝试搜索有关创建对象和文件夹之间差异的文档,因为我认为这是我的困惑所在。@RikoKurahashi我意识到我可能在这里使用了一些令人困惑的名称。我已经编辑了我的答案。本质上,
folder.get()
返回一个
T
,因为
folder
是一个
文件夹(查看参数!)。现在,为什么您可以在
文件夹.get()上使用
.copy()
?因为根据方法签名中的约束,
T
也是一个
副本
。@RikoKurahashi了解
文件夹
文件夹
之间的区别: