Android Studio不支持Java 8默认方法。 是否有可能通过不同的方式实现其功能?
我已经在Java IDE中使用了代码。我正在尝试将以下功能移植到Android Studio。
(在基于刻度的动画循环的上下文中。)
简化,相关架构围绕四件事:
Common
)anObject
),使用Common
方法扩展updateMe()
并实现其所有getter,定义为调用一系列抽象方法。Common
的其他接口,其中每个接口都描述了一个属性,该属性会影响anObject
在执行其抽象方法时的反应。anObject
并实现许多属性接口的具体类。动画循环在每个滴答的每个对象实例上调用updateMe(...)
,这在anObject
中作为方法实现,然后调用anObject
抽象方法(为了问题,只有moveMe()
和drawMe(...)
)。
现在创建要与之交互的复合对象变得非常简单:
Ball extends anObject implements isRound, isMobile
接口isRound
为drawMe(..)
提供了一个默认实现,它使用Common
中的getter(在anObject
中实现)来获取对象的实例变量,然后执行{{ 1}}命令。
同样,drawOval(...)
实现了从isMobile
继承的moveMe()
的抽象Ball
。
过度简化,但确实如此。它使多个对象的管理行为变得简单化。我的完整代码包含冲突检查,播放器输入等。只需添加少量代码,默认方法即可添加全新的游戏和功能。最初的Pong任务现在有能力成为Snake,PacMan,添加多个球等等。它似乎是一个非常强大的资源。
那么,如果我不能使用默认方法,如何将这些'属性'接口的功能转换为android?它基本上允许多重和非线性继承。
在写完之后,我发现每次我想要一个界面向下填充它时我都可以复制/粘贴相关的方法,但这是相当混乱的,并且有可能进行更改和版本化生活的噩梦。我还是想看看是否有人有更好的解决方案。
答案 0 :(得分:0)
我的解决方法:
每个方法都在anObject
中具体实现,moveMe()
和drawMe()
除外,它们都是抽象的。
class anObject {
...
void isRound() {
//drawOval, etc goes here
}
void isSquare() {
//drawRect, etc goes here
}
abstract void drawMe()
带
class Ball extends anObject {
...
void drawMe() { this.isRound(); }
适用于我的目的,因为一切都已经延伸anObject
,但在不是真的情况下不会有用。
答案 1 :(得分:0)
最接近模仿原始代码的方法是通过反射。使用几个枚举关键字标记对象类;然后,在构造函数(或主活动中的某个位置)调用一个帮助器方法,该方法实现枚举引用的方法。