Java 构造函数中带参数的泛型并调用T方法

Java 构造函数中带参数的泛型并调用T方法,java,generics,constructor,Java,Generics,Constructor,我有一个抽象类和2个(目前)子类 主要类别: public abstract class Entite<T> { public Entite(int ligne, int colonne, Etat etat) { ... } /* Some method here*/ } 公共抽象类实体{ 公共实体(林内、科隆内、埃塔特埃塔特){ ... } /*这里有一些方法*/ } 子1(子2几乎相等): 公共类Cellle扩展了Entite{ 公共单元(林

我有一个抽象类和2个(目前)子类

主要类别:

public abstract class Entite<T> {
    public Entite(int ligne, int colonne, Etat etat) {
        ...
    }
/* Some method here*/
}
公共抽象类实体{
公共实体(林内、科隆内、埃塔特埃塔特){
...
}
/*这里有一些方法*/
}
子1(子2几乎相等):

公共类Cellle扩展了Entite{
公共单元(林内、科隆内、埃塔特埃塔特){
超级(林格、科隆、埃塔特);
}
/**在这里重写某些方法*/
}
现在我想在其他类中使用泛型

public class Grille<T extends Entite<T>> {
    protected final T[][] grille;
    public Grille(int dimension, int nbCellulesInitiales, Class<T> classe) {
        grille = (T[][])Array.newInstance(classe, 1); // It's good ?
        Etat etat = Etat.Morte;
        for (int i = 0; i < dimension; i++) {
            for (int j = 0; j < dimension; j++) {
                grille[i][j] = new T(i, j, etat); //How can I create T (Cellule) object ?
            }
        }
公共级格栅{
受保护的最终T[][]格栅;
公共格栅(内部尺寸,内部NBCellulesiniticales,E级){
grilly=(T[][])Array.newInstance(classe,1);//很好吗?
Etat-Etat=Etat.Morte;
对于(int i=0;i

Java对我来说是新的,所以我希望我没有犯白痴错误;)

您不能使用类型参数创建这样的实例。您不能将
new
运算符与类型参数或通配符参数化类型相关联。但是,由于您的构造函数中已经有
Class
参数,因此可以使用它来获取ap使用方法指定适当的构造函数。然后使用传递适当参数的方法实例化对象:

Constructor<T> const = classe.getConstructor(int.class, int.class, Etat.class);

for (int j = 0; j < dimension; j++) {
    grille[i][j] = const.newInstance(i, j, etat); 
}
Constructor const=classe.getConstructor(int.class,int.class,Etat.class);
对于(int j=0;j
更一般的方法是通过工厂,而不是通过

子类?我以前第一次听过这个术语……还有,问题是什么?你有错误/异常吗?如果有,发布它。它不做你想做的事吗?如果是,发布实际和预期的输出。我真的不喜欢这样。我会的看看代码中的大图,看看是否有更好的设计。然而,这回答了问题+1@Cruncher我不知道该说什么:(这是一种倒退,因为它是反射,是正确的解决方案。这绝对没有错。@RohitJain抱歉,你对此无能为力。我只是觉得代码永远不应该达到这是解决方案的地步。我真的不喜欢反射。谢谢你,但我还有另一个问题。我应该让这句话吗:
grilly=(T[][])数组。新实例(classe,1)如果我没有把她替换掉,我会得到这个错误:空白的最终字段格栅可能还没有被初始化,我必须在格栅构造函数中添加:<代码>抛出NouChuthMaoExtExpExt,SufutExpRebug,StimeActudio异常,ILLealAccess异常,ILulalGaluMutExtExtrut,InvocationTarge例外
没错?再次感谢;)
Constructor<T> const = classe.getConstructor(int.class, int.class, Etat.class);

for (int j = 0; j < dimension; j++) {
    grille[i][j] = const.newInstance(i, j, etat); 
}