我有两个班级:
public jComboBox() {
... // this is a autocomplete jComboBox btw
...
combo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie) {
if(ie.getStateChange() == 1) {
String selectedItem = (String)getSelectedItem();
randomMethod(selectedItem);
}
}
});
}
private void randomMethod(String selectedItem){
someClass sc = new someClass();
String randomString = selectedItem;
sc.getRandomString(randomString);
}
和
public someClass() {
...
...
}
public void getRandomString(String randomString){
defaultTableModel.setRowCount(0);
.. do-something ..
}
这种方法好吗?如果没有,我需要一些替代方案,因为我遇到问题,例如,使用defaultTableModel.setRowCount(0)因为表不会为空,除非我将setRowCount(0)放在someClass类中的其他方法上。 / p>
答案 0 :(得分:0)
基本的java访问说明符.....你如何从getRandomString
调用这个私有方法randomMethod()
?类的私有方法的可见性只是类,而不是其他任何地方。因此,您的以下代码:
private void randomMethod(String selectedItem){
someClass sc = new someClass();
String randomString = selectedItem;
fs.getRandomString(randomString); // This will not work
}
由于访问说明符private
,无法正常工作。如果您可以允许访问权限特定于您拥有的包,则可以将其更改为:
protected void getRandromString(String randromString) {...}
只是为了证明我的意思:
package com.stackoverflow.solutionmaker;
public class Aclass {
public Aclass(){
somePrivMethod();
}
public void aMethod(){
System.out.println("Can see me from anywehre bcoz I am public");
}
private void somePrivMethod(){
System.out.println("Cannot find me from anywhere because I am private t Aclass");
}
}
现在是跑步者班:
package com.stackoverflow.solutionmaker;
public class StackOverflowSolutionsRunner {
public static void main(String[] args) {
Aclass aClass = new Aclass(); // It will display"Cannot find me from anywhere because I am private t Aclass"
aClass.aMethod(); // It will display "Can see me from anywehre bcoz I am public
aClass.somePrivMethod(); // Will throw a compile-time error
}
}
现在很好的练习从命令行编译这两个,看看你得到了什么错误信息。或者,使用Eclipse智能IDE或Jcreator,您可以看到您的私有访问说明符导致出现红色消息。