我正在开发一种可以编译为 JVM 字节码的编程语言,它高度依赖接口作为类型。我需要一些方法来使接口私有,但让其他代码仍然能够访问它,但不能实现它。我正在考虑使用带有私有构造函数的抽象类,因此只有同一文件中的类才能访问它。唯一的问题是一次扩展多个抽象类是不可能的。例如,一个简单的编译程序的结构是这样的:// -> Main.javapublic 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.javapublic 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; } }}我想这样做的原因是,一个人不能通过提供自己的实现来搞乱任何其他人的代码,而这些实现应该只能由其他人实现。任何帮助将非常感激。
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
我很确定您应该再次考虑您要做什么并更改方法,但是您问题的答案是向接口添加一些空void方法,该方法正在获取特定于包装器类的内部private类的参数
public class Test {
private class InnerPrivateClass {
private InnerPrivateClass() {}
}
public interface MyInteger {
int getValue();
void accept(InnerPrivateClass c);
}
private class MyIntegerImpl implements MyInteger {
@Override
public int getValue() {
return 0;
}
@Override
public void accept(InnerPrivateClass c) {}
}
}
但是,正如我所说,我不喜欢这样,对我来说,这意味着你的想法被打破了
添加回答
举报
0/150
提交
取消