Java 声明存储在集合中的类型(文字)的变量

Java 声明存储在集合中的类型(文字)的变量,java,class,variables,declaration,literals,Java,Class,Variables,Declaration,Literals,是否可以声明存储在集合中的类型(文字)的变量? 或者对于解释型语言(而不是像Java这样的编译语言)来说,这可能更像是一个特性/任务 例如: import java.util.*; class Base {} class A1 extends Base{} class A2 extends Base{} public class Test{ public static void main(String[] args){ ArrayList<Class<

是否可以声明存储在集合中的类型(文字)的变量? 或者对于解释型语言(而不是像Java这样的编译语言)来说,这可能更像是一个特性/任务

例如:

import java.util.*;

class Base {}
class A1 extends Base{}
class A2 extends Base{}

public class Test{

    public static void main(String[] args){

        ArrayList<Class<? extends Base>> typeArrayList=new ArrayList<Class<? extends Base>>();
        typeArrayList.add(A1.class);
        typeArrayList.add(A2.class);
        typeArrayList.add(A1.class);
        typeArrayList.add(A1.class);
        //etc. etc.

        //now that all the types are nicely stored in a collection,
        //could we somehow use them to declare variables of those types?
        //e.g. declare something like:
        //typeArrayList.get(1) someVariable;

    }//main
}//Testlass
import java.util.*;
类基{}
类A1扩展了基{}
类A2扩展了基{}
公开课考试{
公共静态void main(字符串[]args){
ArrayList您可以使用:

Object o = typeVarArrayList.get(1).newInstance();

但是你需要这个类有一个没有参数的构造函数

如果您需要更具体的构造函数,请参见您可以使用的:

Object o = typeVarArrayList.get(1).newInstance();

但是你需要这个类有一个没有参数的构造函数


如果您需要更具体的构造函数,请参见

您可以使用
newInstance()
如果有可用的默认构造函数,如果没有,则需要有人向您提供factory对象,然后在factory中调用方法来构建您的对象


对于大多数实现来说,工厂模式通常也比较整洁,除非创建的对象实际上只是纯bean,只有默认值,因为工厂允许您正确设置对象。

您可以使用
newInstance()
如果有可用的默认构造函数,如果没有,则需要有人向您提供factory对象,然后在factory中调用方法来构建对象

    //e.g. declare something like:
    //typeArrayList.get(1) someVariable;
对于大多数实现来说,工厂模式通常也比较整洁,除非创建的对象实际上只是纯bean,只有默认值,因为工厂允许您正确设置对象

    //e.g. declare something like:
    //typeArrayList.get(1) someVariable;
简而言之,不,类型声明必须是显式的

例如,为局部变量声明定义以下规则:

LocalVariableDeclaration:
 VariableModifiersopt Type VariableDeclarators

Type:
 PrimitiveType
 ReferenceType

ReferenceType:
 ClassOrInterfaceType
 TypeVariable
 ArrayType
深入到TypeVariable(因为我没有复制整个语言语法),我们得到:

类名称仅限于类名称中预期的内容

简而言之,不,类型声明必须是显式的

例如,为局部变量声明定义以下规则:

LocalVariableDeclaration:
 VariableModifiersopt Type VariableDeclarators

Type:
 PrimitiveType
 ReferenceType

ReferenceType:
 ClassOrInterfaceType
 TypeVariable
 ArrayType
深入到TypeVariable(因为我没有复制整个语言语法),我们得到:


a仅限于类名称中所需的内容。

感谢AVolpe,这有助于创建存储类型的对象。关于原始问题(声明这些类型的变量)第一个解决方案声明了Object类型的变量,而第二个解决方案需要已经知道collection元素中存储的类型,以便我可以向下转换到该类型。在重新阅读您的问题后,我认为您唯一的方法是使用反射来调用方法,编译器不可能知道
在什么posi中点击
列表
。Cheesthanks AVolpe,这有助于创建存储类型的对象。关于原始问题(声明这些类型的变量)第一个解决方案声明了Object类型的变量,而第二个解决方案需要已经知道collection元素中存储的类型,以便我可以向下转换到该类型。在重新阅读您的问题后,我认为您唯一的方法是使用反射来调用方法,编译器不可能知道
在什么posi中点击
列表
。干杯