为了账号安全,请及时绑定邮箱和手机立即绑定

无法实现的Java可见界面

无法实现的Java可见界面

繁花如伊 2022-11-02 15:41:17
我正在开发一种可以编译为 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) {}

    }

}

但是,正如我所说,我不喜欢这样,对我来说,这意味着你的想法被打破了


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 50 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信