hon*_*ong 8 java enums warnings visibility function
我在第 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
}
Run Code Online (Sandbox Code Playgroud)
Intellij 建议生成具有默认参数值的重载方法,如以下代码。
public static void warn(){
warn(null);
}
Run Code Online (Sandbox Code Playgroud)
但我认为这看起来并不直观。
tgd*_*ies 15
为什么会有警告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);
}
}
Run Code Online (Sandbox Code Playgroud)
它将无法编译,因为'b.AreaCalculator.Shape' is not public in 'b.AreaCalculator'. Cannot be accessed from outside package.
修复方法是Shape公开或warn包私有,具体取决于您的意图。
Shape如果您确信已为 选择了正确的可见性,但又想warn从任意类中调用类似该方法的内容,则可以执行 IntelliJ IDEA 建议的修复。