我想知道是否有办法做到这一点:
String **type** = "Player"
ArrayList<**type**> players = new ArrayList();
我的意思是定义一个带有变量String的对象类型。我把'#34;播放器&#34;它可以只是Player
,但是你可以引入变量类型的方法呢?像这样:
public static void main (String[] args)
{
system.out.println("Select a type that u wanna make an array of");
system.out.println("1. Player");
system.out.println("2. Team");
Scanner in = new Scaner (System.in);
createArray(in.next());
}
public static void createArray(String **type**)
{
ArrayList<**type**> x = new ArrayList();
}
这可能吗?
答案 0 :(得分:8)
从Stringly-typed思考运行远离,只需创建自己的类来捕获您想要的有关玩家的所有信息。
public class Player {
// fields, methods to describe a player
}
public class Team {
// fields, methods to describe a team
}
然后,您的ArrayList
会按照您的预期运作。
List<Player> players = new ArrayList<>();
List<Team> teams = new ArrayList<>();
作为旁注:您当前的代码结构只会在该方法中创建列表,之后将无法使用。如果你想要它,你必须返回ArrayList<Player>
,或者当你去使用它时,在main
内声明它。
答案 1 :(得分:1)
我很确定可以使用注释和自定义注释处理器(但可能不是一个好主意)。
然后你的代码看起来像
@StringlyType String type="Player"
你将不得不编写一个自定义注释处理器,每当遇到@StringlyType
注释时,就会像其他答案一样创建一个类。
但有什么意义?
免责声明:我实际上没有尝试过这些;我也不打算。所以我不能保证它有效。
答案 2 :(得分:0)
没有理由这样做:
通用类型仅用于编译时间类型检查,您需要了解这一点,您不需要它们(在运行时确定泛型类型)。
你可以简单地做
List objects = new ArrayList();
并继续将任何类型放入其中,但显然必须将对象转换为正确的类型,然后在从列表中删除之后使用它们。