在我的代码中,我使用了许多if-else语句。我了解到if-else和switch语句并不是一种优雅的编码方式,有没有好的方法可以重构下面的代码?
墙壁、陷阱、门和地板是瓷砖的子类
public class Player{
...
public void move(DIR dir) throws Exception {
Position nextPos = checkMove(dir);
Tile nextTile = TileManager.getTileType(nextPos.getSeq());
if (nextTile instanceof Floor) {
walk();
} else if (nextTile instanceof Wall) {
block();
} else if (nextTile instanceof Trap) {
trap();
} else if (nextTile instanceof Door) {
unlock();
}
}
public void walk(){
...
}
public void block(){
...
}
public void trap(){
...
}
...
}
我试图通过使用方法重载来解决这个问题
public void move1(DIR dir) throws Exception {
Position nextPos = checkMove(dir);
System.out.println(nextPos);
Tile nextTile = TileManager.getTileType(nextPos.getSeq());
moveTo(nextTile);
}
public void moveTo(Floor next) throws Exception {
walk();
}
public void moveTo(Wall next) throws Exception {
block();
}
...
并且存在编译错误
Player类型中的方法move1(Floor)不适用于参数(Tile)
我读过一些帖子,建议泛型类型可能是一个解决方案,但我不知道如何实现它。
好吧,风格取决于语言。您可以在一个项目中混合使用 Java 和 Kotlin:https://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html
您可以在现有的Java项目中创建一个Kotlin文件,如下所示(未测试):
when (nextTile) {
is Floor -> walk()
is Wall -> block()
is Trap -> Trap()
is Door -> unlock()
else -> throw IllegalArgumentException("Unknown expression")
}
看看吧
https://try.kotlinlang.org/#/KotlinKoans/简介/智能铸造/Task.kt
https://kotlinlang.org/docs/reference/typecasts.html
我已经了解到,如果else和switch语句不是一种优雅的编码方式,那么有没有一种重构以下代码的好方法?
一个可能的解决方案是向 Tile
添加一个抽象方法,我们称之为 action()。
(随意想出一个更好的名字。然后你可以做 nextTile.action()
而不用 if
语句。然后将 Floor.walk() 重命名为 Floor.action(),
并类似地为每个 Tile
子类使用其他专用方法。这有一个额外的好处,你可以创建新的
Tile
子类,move()
将能够在不做任何更改的情况下处理它们。
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
我有一个关于Java仿制药的问题。假设我有以下方法: 我如何用通配符<解释上面的类型转换?扩展U>?使用它与只使用有什么区别?
我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类
我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo
我需要将包含类型为Pair的对象的列表序列化为xml 首先,我创建了一个类PairList来保存对的列表,然后我创建了一个实际的类,它表示一对两个值,key和value。 然后,我尝试序列化它: 不幸的是,我遇到了一个异常:。欢迎任何关于如何避免此异常并序列化该类的想法。 如果我选择不序列化ttype和utype字段(通过将其设置为受保护或私有),则序列化有效。我不明白为什么它不想序列化类型字段。
问题内容: 我正在为apache HttpClient包实现一个,如下所示: 但我希望函数不返回任何值,即。这可能吗?由于不是有效的Java类型,因此以下内容无法编译: 我想可以替换为以返回对象,但这并不是我真正想要的。 问 :是否有可能安排在这样一种方式,我可以返回此回调局面从? 问题答案: 泛型仅处理对象类。泛型不支持void和基本类型,您不能将它们用作参数化类型。您必须改用Void。 你能说