我应该如何限制使用预定义类

时间:2018-06-09 07:25:48

标签: java

假设我通过扩展String创建了StringUtil类。现在,任何调用StringUtil的第三方都可以使用为String类定义的所有方法。如何限制某些方法的使用?

3 个答案:

答案 0 :(得分:1)

String 类是final,您无法在Java中扩展最终类。您必须阅读有关Java核心的更多信息。例如,首先阅读https://www.w3schools.in/java-tutorial/super-final-keywords/

此外,当您需要字符串实用程序时,您有几个选项,例如 Apache-Commons-Lang Spring-Core ,这些选项使您的代码可读并具有更多功能。

答案 1 :(得分:0)

如果您有多个类,以便您希望每个类都可以访问StringUtil中的一组方法,则可以执行以下操作:

例如,如果Class1只需要方法:f1f2f3那么您可以创建一个接口interface1,以便仅公开{ {1}},f1f2f3会收到Class类型的对象作为其构造函数的参数。 interface1实施StringUtil

对其他类执行相同操作,以便每个类只能使用您向它们公开的内容。

您还应该阅读dependency injection

接口:

interface1

StringUtils类:

interface Interface1 {
    void f1();
}

interface Interface2 {
    void f2();

    void f3();
}

使用StringUtils类的类:

class StringUtils implements Interface1, Interface2 {
    @Override
    public void f1() {

    }

    @Override
    public void f2() {

    }

    @Override
    public void f3() {

    }
}

答案 2 :(得分:0)

然而,在这种情况下,可能会有一些解决方法:覆盖基础中的方法抛出一些期望,但它不是一个真正的解决方案。我的建议是使用composition而不是inheritance。这意味着您的basehas a relationship superclasses。例如,假设有2个类A(与String类相同)和B(与StringUtil类相同)。

class A {
    public int add(int a, int b) {
        return a + b;
    }

    public int square(int a) {
        return a * a;
    }
}

class B {
    A obj;

    B(A obj) {
        this.obj = obj;
    }

    public int add(int a, int b) {
        return obj.add(a, b);
    }
}

现在,您的B类只显示一个方法add delegates其行为为A类的add方法。此外,B上也没有square