【问题标题】:Accessing Inherited subclass in a different package访问不同包中的继承子类
【发布时间】:2018-10-24 18:27:42
【问题描述】:
package 1; // this is a dependency library

public class A{

public String getName(){
return "In func getName, class A";
}

}

-------------------------------------------
package 2; // this is the library which I am building
import 1;

public class B extends A{

}

----------------------------------------------
package 3; // this is the app which is using the library which I am building
import 2;

public class C {

B b = new B(); // throws error here, says "Cannot access A"
b.getName();
}

这会引发错误B b = new B(); 我不确定这里有什么问题,这应该可以正常工作吧?

我正在构建一个库,我正在从依赖库类扩展一个类。现在我正在使用我在应用程序中构建的库,当我尝试访问继承的类时,它会引发错误。

我在我正在构建的库中添加了如下依赖库

implementation ':dependencyLibrary'

在应用程序中使用我的库

include ':mylibraryName' implementation project(':mylibraryName')

我只是不希望应用可以访问“dependencyLibrary”

【问题讨论】:

  • 你应该提到确切的异常抛出 - 帮助别人帮助你。
  • 说“无法访问 A 类”
  • 你给出的例子工作得很好。请检查您的目录结构以确保您的文件位于正确的目录中。
  • 不是继承问题。这是关于在不包括dependencyLibrary 的情况下访问课程。在android中,当您从library 生成aar 时,它不会包含'library 中包含的依赖模块的来源。有两种方法可以做到这一点。第一个是,您可以生成fat aar,它同时具有librarydependencyLibrary 的来源。第二个是,您必须在app 中包含dependencyLibrary 以及您的library。如果没有这两种方法,绝对不可能做到这一点。

标签: java android oop inheritance android-library


【解决方案1】:

您看到此错误是因为您尚未将库链接到当前项目。 您需要将库项目链接到当前项目,以便导入语句起作用。

这样做的一种方法是:

  1. 转到文件 -> 新建 -> 导入模块 ->
  2. 在 settings.gradle 文件中添加库以包含部分和 同步项目(之后您可以看到带有库的新文件夹 名称已添加到项目结构中)

包括':mylibraryName'

  1. 转到文件 -> 项目结构 -> 应用程序 -> 依赖项选项卡 -> 点击 加号按钮

  2. 列表项

选择模块依赖 -> 选择库(你的库名应该 出现在那里)并放置范围(编译或实现)

  1. 添加这个 在依赖部分的应用级别模块中的 build.gradle 中的行
implementation project(':mylibraryName')

【讨论】:

  • 我已经这样做了。我在我正在构建的库中添加了如下依赖库 >implementation ':dependencyLibrary' 在使用我的库 >include ':mylibraryName' > implementation project(':mylibraryName')到应用程序
猜你喜欢
  • 2011-09-26
  • 2017-09-05
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多