如果我在“public GUI()
”之前插入以下内容,警告会消失,但是什么事情发生了?
@SuppressWarnings("OverridableMethodCallInConstructor")
我真的应该做什么?为什么?
public class GUI extends javax.swing.JFrame {
boolean plusActive;
boolean minusActive;
boolean timesActive;
boolean divActive;
boolean toTheActive;
public GUI() {
initComponents();
zapOperatorBooleans();
}
public void zapOperatorBooleans(){
plusActive = false;
minusActive = false;
timesActive = false;
divActive = false;
toTheActive = false;
}
...
我刚刚阅读(在工具>选项>提示中)“调用可以覆盖的方法在构造函数中可能是危险的,因为在调用重写方法时,对象未完全初始化”但是没有帮我决定我该做什么。
答案 0 :(得分:1)
将zapOperatorBooleans
声明为final
或private
。至于原因,请参阅http://www.javapractices.com/topic/TopicAction.do?Id=215
答案 1 :(得分:0)
所有评论都有帮助。这是修改后的代码。我之前只拥有我以前拥有的东西,因为GUIbuilder用它的initComponents()方法诱惑了我,我抓住了机会并从窗台上掉了下来。
class...
private static boolean plusActive = false;
private static boolean minusActive = false;
等
public GUI() {
initComponents();
}
private void zapOperatorBooleans(){
plusActive = false;
minusActive = false;
等。
(不冗余;在迭代执行GUI期间,一个或多个布尔值设置为true,需要重置,但它们也需要初始值。)
所以这就是我真正应该做的。
更重要的是(从我的角度来看),我对这样一个基本概念和其他概念的无知(例如,我对错误消息“非静态......可能无法从非静态上下文中引用”的无能回应)我做了很多阅读,反映(个人,而不是Java),谷歌搜索,学习,思考...我比我好得多。