从两个项目中抽取公共接口到一个共享项目



我有两个项目,它们有几个共同的类和接口。我正试图将常见的东西转移到另一个项目,并与其他两个项目分享。我们称之为:

项目一个项目B项目常见的

项目A和B有不同方法的接口,如:

项目

interface Foo {
fun screen1InProjectA()
fun screen2InProjectA()
}

项目B

interface Foo {
fun screen1InProjectB()
fun screen2InProjectB()
}

我也有下面的接口,在项目A和b是相同的

interface ContractFoo {
fun screen(to: Foo.() -> Unit)
}

我想移动接口ContractFoo到我的项目公共,但是它有一个Foo依赖,公共项目不能也不应该访问项目a和项目B。是否有一种方法来修改Foo接口,以便我可以移动ContractFoo项目公共?

在我看来,你有两个选择。

1。使用泛型

interface Contract<T> {
fun screen(to: T.() -> Unit)
}

当然,这打开了任何事物的Contract的可能性,即使它不是Foo

2。添加Foo接口到Project Common

您可以在Project Common中设置一个标记接口Foo,如下所示:

interface Foo { }

您将在每个项目中扩展:

interface FooA : Foo {
fun screen1InProjectA()
fun screen2InProjectA()
}
interface FooB : Foo {
fun screen1InProjectB()
fun screen2InProjectB()
}

我选2。

最新更新