java - Class.forName(String) 与动态字符串不起作用
问题描述
这段代码:
private BasePlayer addPlayer(Player player) {
BasePlayer currentPlayer;
try{
String playerClassName = this.getClass().getPackage().toString() + ".Player";
Class cPlayer = Class.forName(playerClassName);
Constructor constructor = cPlayer.getConstructor(new Class[]{ Player.class });
currentPlayer = (BasePlayer) constructor.newInstance(new Object[]{player});
} catch (ClassNotFoundException e) {
log.info(e.toString());
currentPlayer = new BasePlayer(player);
} catch (IllegalAccessException | IllegalArgumentException | InstantiationException | NoSuchMethodException | SecurityException | InvocationTargetException e) {
log.info(e.toString());
return null;
}
log.info(player.getName() + " added to player list with UUID: " + player.getUniqueId().toString());
playerMap.put(player.getUniqueId(), currentPlayer);
return currentPlayer;
}
抛出异常
Java.lang.ClassNotFoundException:包 com.warnea.codecraft.Player
但是,如果我改变
String playerClassName = this.getClass().getPackage().toString() + ".Player";
Class cPlayer = Class.forName(playerClassName);
至
String playerClassName = "com.warnea.codecraft.Player";
Class cPlayer = Class.forName(playerClassName);
它工作正常。为什么我需要看似硬编码包名称?