Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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等价于C泛型数组声明?_Java_C#_Generics - Fatal编程技术网

Java等价于C泛型数组声明?

Java等价于C泛型数组声明?,java,c#,generics,Java,C#,Generics,我有一个通用类,我想从C转换成Java。这门课是这样开始的: public class StackImplementationUsingDynamicArray<T> { private T[] _array = new T[10]; } 我似乎无法获得声明的等效Java代码。此代码至少编译时带有警告,但引发运行时异常: public class StackImplementationUsingDynamicArray<T>

我有一个通用类,我想从C转换成Java。这门课是这样开始的:

   public class StackImplementationUsingDynamicArray<T>
    {
        private T[] _array = new T[10];
    }
我似乎无法获得声明的等效Java代码。此代码至少编译时带有警告,但引发运行时异常:

   public class StackImplementationUsingDynamicArray<T>
    {
        private T[] _array = (T[])Array.newInstance (StackImplementationUsingDynamicArray.class, 10);
    }

在Java中可以做到这一点吗?代码应该是什么?提前感谢您提供的所有指针。

是-但是您需要将实际类型的类对象传递给类的构造函数:

public class StackImplementationUsingDynamicArray<T>
{
    private T[] _array;
    public StackImplementationUsingDynamicArray(Class<T> clazz) {
        _array = (T[]) Array.newInstance(clazz, 10);
    }
然后您可以这样使用:

StackImplementationUsingDynamicArray<String> a =
        new StackImplementationUsingDynamicArray<>(String.class);

Deque likeThis=新的ArrayDeque@ElliottFrisch为什么是新ArrayQue而不是新ArrayList 10?因为它是用来替换数组的,你不需要List的getint方法吗?@Andreas对不起,我会用ArrayDeque替换stackimplementationusingdynamiccarray。因为基本上就是这样。从Javadoc中,Deques还可以用作后进先出堆栈。此接口应优先于遗留堆栈类使用。当一个deque用作堆栈时,元素会从deque的开头被推送和弹出。感谢您的想法。这实际上只是我学习Java时的“练习”。我以前写过一些C代码,作为面试的练习——这是例行程序之一。我有几个栈的实现——动态数组就是其中之一。ArrayList会让事情变得太简单:我确实看到了类似问题的答案,但是——我遗漏了一些东西。埃尔文的回答非常清楚,我能够完成。事实证明,Java与C的差异足以让我保持警觉……谢谢欧文。这正是我需要的解释。