当前位置: 首页 > 面试题库 >

如何向世界其他地方隐藏Java API的内部结构

康照
2023-03-14
问题内容

我正在开发一个Java Api来做事(秘密,嗯;)。

有没有办法隐藏类以及API的内部结构?

我到现在为止发现的内容:

  • 使用内部类(丑陋的方式,我不想将所有内容放到类文件中)
  • 所有类都放在一个包中,这样我就可以使用“包”可见性(同样难看,我需要更多的包)

例:

---
package net.my.app;
//this is the Public Access
class MyPublicClass{
    public void somePublicFunction(){ 
        //access to not visibil classes
    }
}

---
package net.my.app.notvisible:
//this is what i want to hide
class MyNOTPublicClass{
    ...
}
---

有任何想法吗?谢谢!


问题答案:
  • 使用界面定义您的应用程序做什么
  • 创建访问服务的主入口点,仅返回接口
  • 我不会真正隐藏实现类。您永远无法真正将它们隐藏在Java中,并且那些对技术感兴趣的人可能只是使用调试器启动您的应用程序。例如,仅不提供公共构造函数

关于此评论:

肖恩,您能否详细说明您的答案?…

实现我的第二个要点的一种方法是使用服务查找类,例如

public class Lookup {
    private static final Foo foo = new FooImpl();
    public static Foo getFoo() { 
        return foo; 
    }
}

Foo是一个接口,FooImpl一个实现类(如果要强制执行它不能由客户端实例化,则可以是程序包私有的)



 类似资料:
  • 问题内容: 我尝试学习Go,但是我经常感到沮丧,因为其他语言似乎无法在Go中使用某些基本功能。因此,基本上,我想使用在其他文件中定义的结构类型。我能够使用结构类型以外的功能。在main.go中, 正如我所期望的那样,它可以完美运行(以及所有其他功能)(列表位于$ GOPATH中)。在软件包列表中,我将struct定义如下: 我想在其他结构中使用此结构,所以我尝试做这样的事情, 但不幸的是,我收到未

  • 我的场景是这样的:我有一台配置为反向代理的Apache2.2的机器,另一台在8080端口上有Apache Tomcat7监听的机器。 我的目标是让internet用户访问资源“AM”(部署在Tomcat上)时不使用Tomcat机器的IP地址,而只联系反向代理。 ProxyPass/am http://tomcat_server.com:8080/am ProxyPassReverse/am htt

  • 本文向大家介绍Javascript点击其他任意地方隐藏关闭DIV实例,包括了Javascript点击其他任意地方隐藏关闭DIV实例的使用技巧和注意事项,需要的朋友参考一下 代码如下,实现了点击input显示一个div层,当点击除input和div以外的地方的时候,隐藏div的功能。 以上就是本文的全部内容,了解更多JavaScript的语法,大家可以查看:《JavaScript 参考教程》、《Ja

  • 我使用选择调用手风琴项目,如http://jsfiddle.net/Rnfzz/1/ 但是,当我从选择框中选择一个项目时,其他打开的手风琴项目不会自动隐藏。如何隐藏其他手风琴项目,以便仅显示单击的手风琴项目?。 这是html C-1 Anim pariatur cliche reprehenderit,enim eiusmod high life accusamus terry richardso

  • 问题内容: 我有一个使用服务几个片段。每个都是具有以下布局的: 开始活动时,将显示软键盘。为了解决这个问题,我在片段中做了以下操作: 我将传入的参数保存为一种访问主要活动的窗口令牌的方式。这可以正常运行,但是不会打扰到in 的键盘。 最初,我尝试使用膨胀布局代替,即: 但这引发了,大概是因为该片段本身不是活动,并且没有唯一的窗口令牌吗? 是否可以从片段中隐藏软键盘,还是应该在中创建一个方法并从片段

  • 这不是直截了当的问题。在我的例子中,外部类变量和内部类setter方法的参数名称是相同的。比如: 现在我不能用初始化外部类实例变量p,因为它指示内部类。同样,我不能执行会出现错误。现在,我如何分配外部p,使内部类方法的参数与名称p相同?