我希望能够在我的包中有两个"受保护"类.也就是说,我不希望我的包外的文件看到它们是可见的 - 它们仅供包内部使用.
我怎样才能做到这一点?
我只是看着GitHub上的Java Hamcrest代码,并注意到他们采用了一种似乎不直观和笨拙的策略,但它让我想知道我是否遗漏了一些东西.
我在HamCrest API中注意到有一个接口Matcher和一个抽象类BaseMatcher.Matcher接口使用此javadoc声明此方法:
/**
* This method simply acts a friendly reminder not to implement Matcher directly and
* instead extend BaseMatcher. It's easy to ignore JavaDoc, but a bit harder to ignore
* compile errors .
*
* @see Matcher for reasons why.
* @see BaseMatcher
* @deprecated to make
*/
@Deprecated
void _dont_implement_Matcher___instead_extend_BaseMatcher_();
Run Code Online (Sandbox Code Playgroud)
然后在BaseMatcher中,此方法实现如下:
/**
* @see Matcher#_dont_implement_Matcher___instead_extend_BaseMatcher_()
*/
@Override
@Deprecated
public final void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
// See Matcher interface for an explanation …Run Code Online (Sandbox Code Playgroud) 在Java中,通过将访问修饰符保留为默认值(空白),只有同一包中的成员才能访问这些字段.但是,这并不妨碍其他人在同一个包中声明他们的类,然后从那里访问"默认"字段.
在Java中是否有一种方法可以使字段C#等效于internal.也就是说,当我构建我的库(JAR文件)时,别人无法从JAR外部访问这些字段?即使在与我的类相同的包中声明它们的类.
这是我在图书馆的声明:
package com.my.package;
class MyRestrictedClass{
}
Run Code Online (Sandbox Code Playgroud)
我试图阻止的是我的库的用户从他们的项目做我的jar添加到他们的构建路径,如:
package com.my.package; //Add their class to my package
public class DeveloperClass{
public void main(){
MyRestrictedClass foo = new MyRestrictedClass();
}
}
Run Code Online (Sandbox Code Playgroud)