给定输入时调用不同类的包?

时间:2013-05-09 14:53:13

标签: java class package

我已将我的所有课程从我的入门课程带到高中课程的java学院,并将它们放入名为gameChoices的包中。然后我创建了一个类,当用户请求它们时会调用这些类,这称为whichGame。我已经使用import gameChoices导入了我想要调用的类。“无论它是什么游戏”;如何在whichGame中调用这些类?我也将它们全部作为public static main(string [] args),哪些不应该有(我认为它只是whichGame应该......)?那又是什么呢?感谢您帮助新手:)

2 个答案:

答案 0 :(得分:1)

最简单的方法是设置一个大的if / then语句。

if(input.equals("t"))
  thisOne.start();
else if(input.equals("a"))
  anotherOne.start();
else if(input.equals("y"))
  yetAnotherOne.start();

等等。如果你有很多课程,或者他们以相同的字母开头,可能会很痛苦。

答案 1 :(得分:0)

不确定您想要实现什么,但如果您需要按名称访问类,可以尝试Class.forName()并检查抛出的异常(特别是ClassNotFoundException)。 使用不区分大小写的字符串相等性进行名称检查,如果允许您通过反射访问ClassLoader的任何现有类。

修改

这是你的主要课程:

package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
    // initializes your map of letter->game class 
    private static final Map<String, Class<?>> GAMES = new HashMap<String, Class<?>>();
    // constant name of main method for your games
    private static final String MAIN_METHOD_NAME = "main";
    // add your games
    static {
        GAMES.put("c", Chess.class);
        GAMES.put("d", Doom.class);
        // TODO moar gamez
    }

    public static void main(String[] args) {
        try {
            // prompts the user
            System.out.println("Enter the game's name or starting letter: ");
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in)
            );
            // gets the response
            String input = br.readLine();
            br.close();
            // iterates over your games' first letters
            for (String gameName : GAMES.keySet()) {
                // the input starts with one game's first letter...
                if (gameName.startsWith(input.toLowerCase())) {
                    // gets the class
                    GAMES.get(gameName)
                        // gets its main method (typical signature is String[] args)
                        .getMethod(MAIN_METHOD_NAME, String[].class)
                        // invokes its main method with no arguments
                        .invoke((Object) null, (Object) null);
                }
            }
        // handles any disaster
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

现在这里有两个“游戏”类:

package test;

public class Chess {

    public static void main(String[] args) {
        System.out.println("You've chosen Chess!");

    }

}

......和......

package test;

public class Doom {

    public static void main(String[] args) {
        System.out.println("You've chosen Doom!");

    }

}

现在将“Main”类设置为...主类。 当您启动该应用程序时,它将查询您的首字母。 如果您选择“c”或“d”,它将打印出:“您选择了[Chess / Doom]!”

我希望这有助于您入门。