关于Java 9中的非法反射访问存在很多问题.
现在我找不到的是因为所有谷歌都在努力解决错误信息,实际上是非法的反射访问.
所以我的问题很简单:
什么定义非法反射访问以及什么情况触发警告?
我已经收集到它与Java 9中引入的封装原则有关,但它们如何挂在一起以及什么触发警告在什么情况下我找不到解释.
在java8中,可以使用例如访问类java.lang.reflect.Fields的字段。
Field.class.getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)
在java12中(从java9开始),这仅返回一个空数组。即使有
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
组。
任何想法如何实现这一目标?(Appart认为这可能不是一个好主意,我希望能够通过反射在junit测试期间更改代码中的“ static final”字段。Java8可以通过更改“修饰符”来实现。
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(myfield, myfield.getModifiers() & ~Modifier.FINAL);
Run Code Online (Sandbox Code Playgroud)
)
如果我有以下结构,有人可以告诉我如何停止线程?
我想停止线程乙到期线程后Ç.

c = new c();
c.start();
b = new b();
b.start();
class c extends Thread {
@Override
public void run() {
// DRAW IMAGE
// b.stop(); - doenst work
}
}
class b extends Thread {
@Override
public void run() {
// PROGRESS BAR
}
}
Run Code Online (Sandbox Code Playgroud)