提问人:hong 提问时间:9/18/2023 最后编辑:hong 更新时间:9/19/2023 访问量:3339
如何修复类“Shape”超出其定义的可见性范围的警告?(爪哇 17)
How can i fix warning that Class 'Shape' is exposed outside its defined visibility scope? (JAVA 17)
问:
我在第 17 行中设置了函数“warn”,其参数是枚举 Shape。 为什么要警告可见性范围以及如何解决它?
import java.util.Scanner;
public class AreaCalculator {
enum Shape {TRIANGLE, RECTANGLE, CIRCLE}
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
String str = scanner.next();
while (!str.equals("quit")){
str = str.toUpperCase();
warn(Shape.valueOf(str));
}
}
public static void warn(Shape shape) { //warning
}
Intellij 建议使用默认参数值生成重载方法,如以下代码所示。
public static void warn(){
warn(null);
}
但我认为它看起来并不直观。
答:
10赞
tgdavies
9/18/2023
#1
为什么会有警告?Class 'Shape' is exposed outside its defined visibility scope
因为 方法只对同一包中的类可见,但该方法对任何类都是可见的。enum
AreaCalculator.Shape
public static void warn(Shape shape)
因此,如果我们编写一个类:
package a;
import b.AreaCalculator;
public class AreaCalculatorClient {
public static void main(String[] args) {
AreaCalculator.warn(AreaCalculator.Shape.CIRCLE);
}
}
它将无法编译,因为.'b.AreaCalculator.Shape' is not public in 'b.AreaCalculator'. Cannot be accessed from outside package
解决方法是使用“设为公共”或“包私有”,具体取决于您的意图。Shape
warn
IntelliJ IDEA 建议的修复程序是您可以执行的操作,如果您确信您已经为 选择了正确的可见性,但您想从任意类中调用类似该方法的东西。Shape
warn
评论
0赞
hong
9/18/2023
我喜欢你的回答!谢谢:)
2赞
Joachim Sauer
9/18/2023
@hong:有一个专门的按钮,上面写着“喜欢这个答案”,这是点赞按钮,你可能应该按下它(事实上,这比将其作为评论发布更可取)。此外,如果它有助于解决您的问题,请随时接受该问题。
0赞
Reilas
9/19/2023
#2
"...我在第 17 行中设置了函数“warn”,其参数是枚举 Shape。为什么要警告可见性范围以及如何解决它?..."
我在这里没有收到任何警告,代码编译。
如果我输入任何一个值,我会得到一个无限循环。
要解决此问题,请在每次 while 循环迭代时分配 str。
String str;
while (!(str = scanner.nextLine()).equals("quit")){
str = str.toUpperCase();
warn(Shape.valueOf(str));
}
输出
TRIANGLE
TRIANGLE
RECTANGLE
RECTANGLE
CIRCLE
CIRCLE
quit
评论
enum Shape
public
warn
public
Shape
warn