我正在开发一种可以编译为 JVM 字节码的编程语言,它高度依赖接口作为类型。我需要一些方法来使接口私有,但让其他代码仍然能够访问它,但不能实现它。
我正在考虑使用带有私有构造函数的抽象类,因此只有同一文件中的类才能访问它。唯一的问题是一次扩展多个抽象类是不可能的。例如,一个简单的编译程序的结构是这样的:
// -> Main.java
public class Main {
public static MyInteger getMyInteger() {
return new MyIntegerImpl(10);
}
public static void main(String[] args) {}
private interface MyInteger {
public int getValue();
}
private static class MyIntegerImpl implements MyInteger {
private final int value;
public int getValue() {
return value;
}
public MyIntegerImpl(int value) {
this.value = value;
}
}
}
还有另一个文件,其中存在问题:
// -> OtherFile.java
public class OtherFile {
public static void main(String[] args) {
Main.MyInteger myInteger = Main.getMyInteger(); //Error: The type Main.MyInteger is not visible.
System.out.println(myInteger.getValue());
}
//I do not want this to be allowed
public static class sneakyInteger implements Main.MyInteger { //Error(Which is good)
public int getValue() {
System.out.println("Person accessed value");
return 10;
}
}
}
我想这样做的原因是,一个人不能通过提供自己的实现来搞乱任何其他人的代码,而这些实现应该只能由其他人实现。
任何帮助将非常感激。
慕尼黑8549860
相关分类