小编0-4*_*23o的帖子

getClass()返回java.lang.Class [Reflection]

因此,在通过Reflection获取方法的参数时:

Class<?>[] params = m.getParameterTypes();
Run Code Online (Sandbox Code Playgroud)

假设我循环遍历方法并寻找只有一个参数的方法:

if(params.length > 1) {
     continue;
}
Run Code Online (Sandbox Code Playgroud)

如果params数组的长度为1,则获取该参数:

Class<?> par = params[0];
Run Code Online (Sandbox Code Playgroud)

当我尝试使用getClass()方法打印参数的类时,它返回java.lang.Class.

但是,当我使用getSuperclass()方法获取超类时,它返回超类.

例如:

System.out.println(par.getClass());
System.out.println(par.getSuperclass());
Run Code Online (Sandbox Code Playgroud)

假设我们所拥有的方法的参数是一个名为"PlayerDeathEvent"的类,它扩展了抽象的"Event"类.

话虽这么说,输出将是:

java.lang.Class
org.mypackage.Event
Run Code Online (Sandbox Code Playgroud)

有没有理由发生这种情况?我用getCanonicalName找到了解决这个问题的方法,但我很好奇为什么会这样.

java reflection

1
推荐指数
1
解决办法
2979
查看次数

同步 - 锁之间的差异

下面的锁定和并发方法有什么区别?

public synchronized ArrayList<Player> getPlayers() {
     return players;
}

public ArrayList<Player> getPlayers() {
     synchronized(players) {
          return players;
     }
}

public ArrayList<Player> getPlayers() {
     synchronized(GameHandler.class) {
          return players;
     }
}
Run Code Online (Sandbox Code Playgroud)

我们如何决定在哪种情况下应该使用哪一个?

编辑:

我已经编辑了我的帖子标题和帖子以证明这不是重复.谢谢.

java multithreading

-9
推荐指数
1
解决办法
448
查看次数

标签 统计

java ×2

multithreading ×1

reflection ×1