相关疑难解决方法(0)

如何保护课程,使其在包装外不可见

我希望能够在我的包中有两个"受保护"类.也就是说,我不希望我的包外的文件看到它们是可见的 - 它们仅供包内部使用.

我怎样才能做到这一点?

java class protected

41
推荐指数
1
解决办法
5万
查看次数

为什么坚持接口的所有实现都扩展了基类?

我只是看着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 inheritance abstract-class interface hamcrest

26
推荐指数
2
解决办法
1266
查看次数

Java相当于C#的"内部"

在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)

c# java access-modifiers internal

6
推荐指数
1
解决办法
1213
查看次数