java - 在方法java中进行转换

标签 java arrays casting

<分区>

我对 toArray 方法有疑问。在此示例中,我使用 Integer 并通过转换 Integer 来解决它,但该方法应该适用于所有类型,而无需在 main 中进行转换。

为什么我不能在我的主要方法中使用这两个中的一个?

arr = (T[]) a.toArray(arr) ;

甚至

arr = a.toArray(arr) 

我遇到类型不匹配:无法从对象[] 转换为整数[]

size() 和 addFirst() 都有效。

public static void main(String[] args) {

    ArrayDeque a = new ArrayDeque(5);
    a.addFirst(1);
    a.addFirst(2);

    Integer [] arr = new Integer[a.size()];
    arr=  (Integer[]) a.toArray(arr);
    System.out.println(Arrays.toString(arr));   
}



public class ArrayDeque<E> implements IDeque<E> {

    private int counter= 0;
    private E[] deque;

    @SuppressWarnings("unchecked")
    public ArrayDeque(int size) {
      deque = (E[]) new Object[size];
  }


public <E> E[] toArray(E[] a) {
    return (E[]) Arrays.copyOf(deque, counter, a.getClass());
    }

}

最佳答案

您正在实例化原始类型:

ArrayDeque a = new ArrayDeque(5);

改成

ArrayDeque<Integer> a = new ArrayDeque<>(5);

这将消除将返回的数组转换为 Integer[] 的需要。

P.S.,toArray(E[] a)定义它自己的泛型类型参数E是没有意义的。它应该使用类级别定义的参数。

关于java - 在方法java中进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644216/

相关文章:

php - 在 PHP 中循环遍历这个数组的最佳方法是什么?

javascript - 访问 javascript 数组 `myArray[1,3]` 中的值时传递 2 个值

C++ 对象和 C 风格转换问题

r - 将数据转换为整数/nu 会更改数据

swift - 在 Swift 中,另一个对象的函数可以转换为不同类型的对象吗?

java - com.fasterxml.jackson.databind.JsonMappingException : No content to map due to end-of-input

java - 为什么模拟注释不模拟/注入(inject)存储库?

java - 我无法使用地理位置 API

c - K&R 练习 1-19 : Reverse Char Array

java - 由 : com. jcraft.jsch.JSchException 引起:使用 sftp 私钥进行身份验证失败