java 通用数组_如何在Java中创建通用数组?

news/2024/5/19 2:11:09

由于Java泛型的实现,因此不能有以下代码:

public class GenSet {

private E a[];

public GenSet() {

a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation

}

}

如何在保持类型安全的同时实现此目的?

我在Java论坛上看到了这样的解决方案:

import java.lang.reflect.Array;

class Stack {

public Stack(Class clazz, int capacity) {

array = (T[])Array.newInstance(clazz, capacity);

}

private final T[] array;

}

但是我真的不知道发生了什么。

#1楼

一个简单但杂乱的解决方法是在主类中嵌套第二个“ holder”类,并使用它来保存数据。

public class Whatever{

private class Holder{

OtherThing thing;

}

public Holder[] arrayOfHolders = new Holder[10]

}

#2楼

我编写了此代码段,以反射方式实例化为简单的自动化测试实用程序传递的类。

Object attributeValue = null;

try {

if(clazz.isArray()){

Class> arrayType = clazz.getComponentType();

attributeValue = Array.newInstance(arrayType, 0);

}

else if(!clazz.isInterface()){

attributeValue = BeanUtils.instantiateClass(clazz);

}

} catch (Exception e) {

logger.debug("Cannot instanciate \"{}\"", new Object[]{clazz});

}

请注意以下部分:

if(clazz.isArray()){

Class> arrayType = clazz.getComponentType();

attributeValue = Array.newInstance(arrayType, 0);

}

用于数组初始化,其中Array.newInstance(array的类,array的大小) 。 类可以是原始(int.class)和对象(Integer.class)。

BeanUtils是Spring的一部分。

#3楼

还要看这段代码:

public static T[] toArray(final List obj) {

if (obj == null || obj.isEmpty()) {

return null;

}

final T t = obj.get(0);

final T[] res = (T[]) Array.newInstance(t.getClass(), obj.size());

for (int i = 0; i < obj.size(); i++) {

res[i] = obj.get(i);

}

return res;

}

它将任何类型的对象的列表转换为相同类型的数组。

#4楼

要扩展更多维度,只需将[]和维度参数添加到newInstance() ( T是类型参数, cls是Class , d1到d5是整数):

T[] array = (T[])Array.newInstance(cls, d1);

T[][] array = (T[][])Array.newInstance(cls, d1, d2);

T[][][] array = (T[][][])Array.newInstance(cls, d1, d2, d3);

T[][][][] array = (T[][][][])Array.newInstance(cls, d1, d2, d3, d4);

T[][][][][] array = (T[][][][][])Array.newInstance(cls, d1, d2, d3, d4, d5);

#5楼

也许与这个问题无关,但是当我使用时出现“ generic array creation ”错误

Tuple[] tupleArray = new Tuple[10];

我发现@SuppressWarnings({"unchecked"})的以下作品(并为我工作@SuppressWarnings({"unchecked"}) :

Tuple[] tupleArray = new Tuple[10];


http://www.niftyadmin.cn/n/707416.html

相关文章

荒野大镖客2云存储失败_荒野大镖客2天气系统云雾分帧处理细节

在荒野大镖客2分享在SIGGRAPH2019的文章里面有几张PPT是关于云雾是怎么优化Raymarch效率的&#xff0c;我先按照我的理解说一遍到底这几页PPT在讲什么。首先是告诉我们因为体素不能表现很多高频细节&#xff0c;所以从体素的远端开始要进行视口的Raymarch&#xff0c;然而全分辨…

java注释工具_Java注释和javadoc工具

本篇文章分为两部分&#xff1a;注释(基础)和注释(进阶)。在注释(基础)部分&#xff0c;主要讲述注释的概念、类别、写注释的规范、细节和作用&#xff1b;在注释(进阶)部分&#xff0c;主要讲使用javadoc开发工具生成一个开发者文档。内容概览&#xff1a;注释基础注释的概念注…

LoadRunner监控图表与配置(二)监控运行状况和交易状况

1、在左侧Available Graphs视图中展开Runtime Graphs节点&#xff0c;选择其中一种类型添加至控制器运行标签的界面。 2、在图中显示的空白区域点击右键&#xff0c;在弹出的快捷菜单中选择configure选项&#xff0c;弹出如下图表配置窗口。设置完成后点击“OK”,更改的图表属性…

配送区域是什么意思_Wish卖家如何进行配送设置

本文将向你介绍Wish的配送体系&#xff0c;包括配送政策、运费设置&#xff0c;和关于配送设置的小技巧。关于配送亲爱的Wish商户&#xff0c;在店铺维度上&#xff0c;你可选择以下三种配送范围之一&#xff1a;仅配送至美国、全球配送或配送至选定国家。快速可靠的产品配送是…

java 8 新特性equal使用_Java 8 新特性:4-断言(Predicate)接口

(原)这个接口主要用于判断&#xff0c;先看看它的实现&#xff0c;说明&#xff0c;再给个例子。/** Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/package java.util…

oscached

介绍 提供了在现有JSP页面之内实现快速内存缓冲的功能,是一个广泛采用的高性能的J2EE缓存框架&#xff0c;OSCache能用于任何Java应用程序的普通的缓存解决方案。 特点&#xff1a;缓存任何对象&#xff0c;你可以不受限制的缓存部分jsp页面或HTTP请求&#xff0c;任何java对…

jsonp react 获取返回值_ajax请求JSONP格式,后台返回值是SUCCESS,返回这样的数据格式可不可以调用某某方法?...

能不能在不改后台代码的情况下实现&#xff0c;现在总是走error的方法&#xff0c;response只是”success”(**说让他们改后台很难)还要跨站请求的需求。不改后台就实现JSONP??前端什么时候这么厉害了首先要理解什么是jsonp&#xff0c;自己写个请求就行了&#xff0c;不一定…

C#,VB.NET 如何将Excel转换为Text

在工作中&#xff0c;有时我们需要转换文档的格式&#xff0c;之前已经跟大家介绍过了如何将Excel转换为PDF。今天将与大家分享如何将Excel转换为Text。这次我使用的依然是免费版的Spire.XLS for .NET组件。 Free Spire.XLS for .NET组件可以使开发人员在任何.NET应用程序上创建…