我有一个类 (Capsule),它有很多 protected 方法 (30+)。这个想法是允许开发人员扩展此类并在类 (ImADev) 中使用 protected 方法,但将其留给开发人员将它们公开为公共(public)(按他们认为合适的方式覆盖方法)。
我现在有一个用例,我想将这些对象传递给一些实用程序类/方法并允许它们访问 protected 方法..除非它们受到保护,所以我的实用程序类/服务不能看到他们。
请看下面的例子:
// My Capsule class with protected methods
public abstract class Capsule {
public Capsule(..) { .. }
protected String getFoo() { return "foo"; }
}
// How a dev should use the class
public class ImADev extends Capsule {
public ImADev(..) { super(..); }
public String getBar() { this.getFoo() + "BAR");
}
// A special utility class
// Helper.helper() can accept any class derived from Capsule
public class Helper {
public String helper(Capsule c) {
return " im doing something awesome with " + c.getFoo();
// Except i cant do this, because c.getFoo() is protected.
}
}
解决这个问题的最佳方法是什么?请记住,我有很多 protected 方法。
最佳答案
要么您的类(class)做得太多,在这种情况下,将其分解为更小、定义更明确的类(class)
或者,实现您的实用程序类可以调用的安全公共(public)方法来包装您的 protected 方法
或者,只是将它们公开,因为听起来它们可能/应该是
或者,将类中的数据与行为(组合)分开,那么您的实用程序类只需处理更安全的公共(public) getter 方法,而不是可以更改内部结构的 protected 行为方法
在不了解您的应用程序及其用途的情况下,很难提供更好的答案
关于Java:公开 protected 方法的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746460/