Java 声明存储在集合中的类型(文字)的变量
是否可以声明存储在集合中的类型(文字)的变量? 或者对于解释型语言(而不是像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<
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中点击列表
。干杯