我有一个ClassClass ClassO.和类SecondClass< O> ;,我想在SecondClass< O>中创建一个O []在从FirstClass< O>调用的例程中,其中O是通用类参数.我找不到如何执行此操作.
我特别需要O [](而不是ArrayList O或类似的东西),因为我需要经常在循环体内获取它的元素,这对我算法的执行时间很重要.
因此,我希望遵循这些原则.
public class FirstClass {
void someRoutine(n and other params) {
//Do some stuff
SecondClass = new SecondClass(n, possibly_other_params);
//Do some stuff
}
}
和
public class SecondClass {
O[] myArray;
SecondClass(int n, possibly_other_params) {
//Here the constructor that creates an O[n]
}
}
我在网上找到了一些方法,但不适用于我的情况:
>使用O [] array =(O [])new Object [n];但这不能编译.
>使用Object []数组= new Object [n];并在每次我向数组请求内容时执行(O)强制转换,但这太慢了
>使用Array.newInstance(Class< O> type,int n);和O o;和type = o.class,但它抱怨现在类型为Class< CAP#1>. CAP#1表示什么,而不是Class< O>类型.
我应该如何在Java中正确地做到这一点,并牢记最佳执行速度?
解决方法:
Java对泛型的处理非常粗糙,但是如果您准备进行细微调整,则可以完成接近所需的操作.请参见:
public class FirstClass {
Class type;
public static FirstClass create(Class type) {
return new FirstClass(type);
}
public FirstClass(Class type) {
this.type = type;
}
public void routine(int size /*, other params */ ) {
SecondClass instance = new SecondClass(type, size);
}
}
public class SecondClass {
public O[] array;
@SuppressWarnings("unchecked")
public SecondClass(Class type,int size) {
array = (O[])Array.newInstance(type,size);
}
}
和一个用例:
FirstClass instance = FirstClass.create(Integer.class);
instance.routine(110);
这只是一个粗糙的示例,尽管我确信您无需使用此方法即可完成类似的操作.
标签:generics,java
来源: https://codeday.me/bug/20191031/1979379.html