1

パッケージの外部から継承してはならないステートレスな抽象基本クラスがあります。

package foo;

public abstract class Foo
{
    // some abstract methods
    // one concrete method
    // no state

    // Prevent classes outside of package foo from inheriting
    Foo()
    {
    }
}

Java 8 がインターフェイスでデフォルト メソッドをサポートするようになったので、抽象クラスをインターフェイスに変換したいと思います。インターフェイスを使用して、現在のパッケージの外部で継承を防ぐこともできますか?

4

1 に答える 1

0

Javaチュートリアルから:

.. インターフェイス内のすべての抽象メソッド、デフォルト メソッド、および静的メソッドは暗黙的にパブリックであるため、public 修飾子を省略できます。

これは、インターフェイスの可視性をパッケージに制限しない限りできないことを意味します。しかし、私はあなたができないと思います。

package foo;

interface Foo
{
}

カスタム アノテーション (のようなリンク@InstanciableOnlyInMyPackage) を記述して、インターフェイスに配置できると思います。そして、 Annotation Processing Toolを使用してコンパイラエラーを発生させます。

于 2014-07-10T13:28:03.027 に答える