我希望能够在一个包中编写一个Java类,它可以访问另一个包中的类的非公共方法,而不必使它成为另一个类的子类.这可能吗?
我想知道为什么Java的设计没有friend
C++中提供的指令,以便更好地控制哪些方法和实例变量可以从已定义类的包外部获得.
我没有看到任何实际的原因或任何特定的缺点,它似乎只是一个设计问题,但如果添加到语言中则不会产生任何问题.
我正在开发一个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{
...
}
---
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
我正在努力打包API以供公众使用.因此,我试图限制只暴露于我希望公开和可支持的方法.当然,在这下面有许多有限的访问方法.
麻烦的是我有很多内部代码需要访问这些受限制的方法而不公开这些方法.这会产生两个问题:
所以,我有大约70或80个内部类在干净隔离的包中但是具有过度宽松的访问修饰符.你会说单个包是两个邪恶中的较小者还是有更好的方法来掩盖我的内部方法,同时保持更细粒度的包?
我有兴趣在这里找到最好的做法.
我已经意识到了这一点
好吧,让我们离开关于友谊是否打破封装的争论,并且实际上尝试优雅地提出一个连贯的设计.这是一个双重功能:
1)关于如何实施的一般问题:
public class A
{
friend class B;
}
Run Code Online (Sandbox Code Playgroud)
2)为什么我需要这个功能?我的一些类实现了Serializable接口.但是,我想在Derived类中使Serializable方法受到保护,这样我就不会将它们暴露给客户端(以及文档中的javadoc).但是,内部类应该能够访问它们.在java中解决这个问题的一般方法是什么?
注意:我正在使用当前C++标准中定义的友谊.
谢谢