gpt4 book ai didi

java - 防止对 Java/Kotlin 中的类的依赖,但允许扩展

转载 作者:行者123 更新时间:2023-12-02 01:28:21 25 4
gpt4 key购买 nike

我希望创建一个有用的 Java 基类,其中包含一些 protected 方法和 Hook ,以便可以轻松实现子类。

但是,我希望此类仅可用于派生子类,但不能用作依赖项。原因是为了防止一些初级/粗心的开发人员将他们的代码耦合到这个基类。

例如,如果我的基类名为 BaseActivity.java,那么任何人都可以创建自己的

public class MyNewActivity extends BaseActivity

但是没有人可以通过字段或方法签名直接引用 BaseActivity,例如不应允许这样做:

public void doSomethingOnBaseActivity(BaseActivity activity);

private BaseActivity someField;

public BaseActivity getActivity();

Java中有没有办法实现这样的限制?也许在 Kotlin 中这是可能的?

编辑:这不是 Kotlin: Can an abstract super class have an abstract constructor? 的重复项。我希望防止对基类的依赖,而不仅仅是实例化。 “摘要”在这里没有帮助。

最佳答案

不,这是不可能的。这个答案适用于所有类型,无论是否抽象、接口(interface)还是类。当您处于类的范围内(例如同一包)并且​​该类未密封时,该范围内的每个人都可以继承它。只要您在范围内,就可以引用此类型。这就是访问修饰符的要点。允许扩展类型但不引用它是没有意义的。这与概念相矛盾。你为什么想这么做?无论如何,您都无法删除该基类,因为这会破坏所有继承者的代码。允许扩展但不允许引用是没有意义的。这是什么原因呢。也许有不同的方法来实现你的目标。当有人从类型继承的那一刻就创建了依赖关系。这种依赖关系称为继承。子类型是父类(super class)型。您无法向编译器隐藏这一事实。

如果您想省略依赖项但重用代码或提供代码模板,则不要使用类型。您可以使用文件模板或代码生成器来生成可重用的代码(如代码 fragment )。

关于java - 防止对 Java/Kotlin 中的类的依赖,但允许扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56503718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com