我最近开始阅读有关Java Swing和lambda表达式的内容。我读到你应该总是通过调用java.awt.EventQueue.invokeLater()
这样的方法构建一个框架:
public class SwingTests
{
private static void createGUI()
{
//creates frame, packs etc.
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
createGUI();
}
}); //haven't really figured out formatting for this yet
}
}
然后我的IDE建议使用lambda表达式而不是匿名类,所以我切换到
java.awt.EventQueue.invokeLater(() -> createGUI());
但在阅读时,我也发现了方法参考,并希望使用它们。但是,用() -> createGUI()
替换this::createGUI
会产生编译器错误,因为“无法从静态上下文引用非静态变量”。我发现SwingTests::createGUI
有效,但在自己的身体中提到一个名字似乎很奇怪。有更好的方法吗?
答案 0 :(得分:0)
显然,这是正确的方法,任何可能允许的快捷方式都会导致编译器模糊不清。另见Holger的链接:
另见“Why class/object name must be explicitly specified for method references?”