引入String以定义类型

时间:2016-02-27 19:12:17

标签: java

我想知道是否有办法做到这一点:

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();

}

这可能吗?

3 个答案:

答案 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();

并继续将任何类型放入其中,但显然必须将对象转换为正确的类型,然后在从列表中删除之后使用它们。