首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java中更改很多if/else类应该返回的地方

在Java中,如果需要更改很多if/else类应该返回的地方,可以考虑使用多态和设计模式来优化代码结构,提高可维护性和可扩展性。

一种常见的做法是使用策略模式(Strategy Pattern),它可以将不同的算法封装成不同的策略类,然后通过上下文类来选择具体的策略进行执行。这样可以避免使用大量的if/else语句,使代码更加清晰和可扩展。

以下是一个示例代码:

首先,定义一个策略接口(Strategy):

代码语言:txt
复制
public interface Strategy {
    void execute();
}

然后,实现具体的策略类,例如:

代码语言:txt
复制
public class StrategyA implements Strategy {
    @Override
    public void execute() {
        // 执行策略A的逻辑
    }
}

public class StrategyB implements Strategy {
    @Override
    public void execute() {
        // 执行策略B的逻辑
    }
}

// 其他策略类...

接下来,创建上下文类(Context),用于选择和执行具体的策略:

代码语言:txt
复制
public class Context {
    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

最后,在使用的地方,根据需要选择具体的策略进行执行:

代码语言:txt
复制
public class Main {
    public static void main(String[] args) {
        Context context = new Context();

        // 根据需要设置具体的策略
        context.setStrategy(new StrategyA());
        context.executeStrategy();

        // 根据需要设置其他策略
        context.setStrategy(new StrategyB());
        context.executeStrategy();
    }
}

通过使用策略模式,可以将原本需要使用大量if/else语句的地方,改为通过选择具体的策略类来执行相应的逻辑。这样可以使代码更加清晰、可扩展和易于维护。

腾讯云相关产品:腾讯云函数(SCF)是一种事件驱动的无服务器计算服务,可以用于执行代码逻辑。您可以将不同的策略封装成云函数,并通过事件触发来执行相应的策略逻辑。详情请参考腾讯云函数产品介绍:腾讯云函数

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaString应该注意一些地方

这个思想应该是享元模式思想,但JDK内部在这里实现是否应用了这个模式,不得而知。    ...(4)由于Stringimmutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer,以提高程序效率。...和 C# 字符串类型行为相似,只有细微差异。...两种字符串类型都是不可变,意味着一旦创建了字符串,字符串值就无法更改。两个实例方法看上去修改了字符串实际内容,实际上创建并返回了一个新字符串,而原始字符串保持不变。...C# 和 Java 中比较字符串值过程有所不同。若要在 Java 中比较字符串值,则开发人员需要在字符串类型上调用 equals 方法,原因是默认情况下 == 运算符会比较引用类型。

49510

Java可变对象(Mutable)与不可变对象(Immutable)

但这鼓励我学习更多有关 Java Immutable和Mutable知识,以及如何在 Java 创建自定义Immutable。...在本文中,我不仅将分享在 Java Immutable步骤,还将讨论可变对象与不可变对象及其优缺点。这也是一个常见 String 面试问题 ,Java 开发人员也应该意识到这一点。  ...Java 可变和不可变是什么? 在 Java ,可变和不可变概念指的是对象创建后其状态是否可以更改。可变是指实例创建后可以修改,而不可变一旦创建就不能改变其状态。...不可变 String)也可以被缓存,在 Java ,String 被缓存在一个特殊 String 池中,这主要是为了节省内存,并允许重复使用 String 字面量: 如何在 Java 创建不可变...final ,这样它们就不能被扩展,但仅仅使成为 final 并不能使其成为不可变,尤其是当它可能泄漏状态(返回一个非 final 对象和状态一部分)时。

21530

IntelliJ IDEA使用技巧

常用快捷键 查询快捷键 CTRL+N 查找 CTRL+SHIFT+N 查找文件 CTRL+SHIFT+ALT+N 查找方法或变量 CIRL+B 找变量来源 CTRL+ALT+...CTRL+ALT+L 格式化代码 CTRL+ALT+I 自动缩进 CTRL+ALT+O 优化导入和包 ALT+INSERT 生成代码(GET,SET方法,构造函数等) CTRL...+E 最近更改代码 CTRL+SHIFT+SPACE 自动补全代码 CTRL+空格 代码提示 CTRL+ALT+SPACE 名或接口名提示 CTRL+P 方法参数提示 CTRL+J...那么如何在IDEA安装genymotion插件呢? File-->Settings-->Plugins-->Browse repositories-->搜索genymotion,安装即可 ? ?...⊙面试题68(加深你对栈理解_让你知道什么是栈) ⊙来测试一下你对数据结构栈和队列了解有多少? ⊙面试题63(链表,哈希表) ⊙ 请你对Java了解有多少? ⊙ 这个培训机构怎么?

1K40

Java网络和代理

在任何情况下,像Java这样开发平台应该提供处理这些强大且灵活代理机制。不幸是,直到最近,Java平台在该领域还不是很灵活。...例如以下代码: 将在协议处理程序触发以下伪调用: 在我们实现,我们所要做就是检查URI协议是否确实是http(或https),在这种情况下,我们将返回代理列表,否则我们只委托默认代理。...其次,请注意select()方法非法参数检查以遵守规范。最后,请注意代码如何在必要时遵循旧默认值(如果有的话)。...应该注意是,Java Plugin和Java Webstart都会使用自定义ProxySelector替换默认ProxySelector,以便更好地与底层平台或容器(Web浏览器)集成。...从非常简单(使用系统代理设置)到非常灵活(更改ProxySelector,尽管仅限有经验开发人员),包括Proxy每个连接选择。

1K20

【100 种语言速成】第 5 节:Kotlin

Kotlin 之于 Java 就像 ES6 之于旧式 JavaScript。很多人都被 JavaScript 引擎(浏览器)或 JVM( Android)所困。...Kotlin 在 Android 开发人员特别受欢迎,但你可以在任何可以使用 JVM 地方使用它,而且现在真的很难找到使用“纯 Java正当理由。...我在代码库包含了一个允许 ./run file.kt 简短脚本。 斐波那契 我们需要一些类型注释,感觉它们应该是可推断,但它们都是完全合理代码。...) println("".length) } 输出 5 4 2 数据 Java 使得处理几乎任何类型数据都变得非常乏味。...函数式编程 我们如何在 Kotlin 执行 map、filter 和 reduce ?它看起来像带有{ arguments -> ... }块 Ruby。

1.6K51

Java不可变机制

JDK内部自带很多不可变:Interger、Long和String等。 ...可变(Mutable Class):相对于不可变,可变创建实例后可以改变其成员变量值,开发创建大部分类都属于可变。  不可变特性对JAVA来说带来怎样好处? ...可以降低并发错误可能性,因为不需要用一些锁机制等保证内存一致性问题也减少了同步开销。  2)易于构造、使用和测试。  不可变设计原则  如何在Java写出Immutable?...6)如果类包含mutable对象,那么返回给客户端时候,返回该对象一个深拷贝,而不是该对象本身(该条可以归为第一条一个特例)  如果将构造器传入对象直接赋值给成员变量,还是可以通过对传入对象修改进而导致改变内部变量值...这种特性使得不可变提供了线程安全特性,但同时也带来了对象创建开销,每更改一个属性都是重新创建一个新对象。JDK内部也提供了很多不可变Integer、Double、String等。

88720

FreeMarker与JSP 2.0 + JSTL组合进行比较

所以我们强迫模板作者(通过${washable} 导致错误)找出他的人类知识如何在给定地方显示布尔值。格式化一个布尔就像常见方式${washable?...不用于演示相关任务(但是对于业务逻辑等)方法应该以纯Java方法实现,并且根本不应该使用任何FreeMarker特定,因为根据MVC范例,它们必须独立于演示技术(FreeMarker )。...例如,如果您Integer在地图中使用密钥,那么您应该写${myMap.get(numKey?int)}。这是因为FTL故意简化型系统只有一种数字类型,而Java区分了很多数值类型。...您将需要从某个地方获取(一个FTL哈希字面值不够,因为它只读,也不支持)。例如,您可以公开一个Java方法或 返回模板,这样就可以 。apimyMap?...您会更改模板语言语法以适应我编辑器吗? 我们不会更改标准版本,因为很多模板依赖于它。

5.4K40

【16】进大厂必须掌握面试题-100个python面试

Python没有访问说明(C ++public,private)。 在Python,函数是一流对象。这意味着可以将它们分配给变量,从其他函数返回并传递给函数。...回答: Self是实例或对象。在Python,这明确包含为第一个参数。但是,在Java不是这种情况,它是可选。它有助于区分具有局部变量方法和属性。...在原始副本中所做更改不会影响使用该对象任何其他副本。由于为每个被调用对象制作了某些副本,因此深层复制会使程序执行速度变慢。 Q50。如何在Python实现多线程?...层次继承–从一个基可以继承任意数量子类 多重继承–派生继承自多个基。 Q56。如何在Python创建? 回答: Python是使用class关键字创建。...如何在Python创建一个空? 回答:空是在其块内未定义任何代码。可以使用pass 关键字创建它 。但是,您可以在本身之外创建此类对象。

16.1K30

开源规则引擎——ice:致力于解决灵活繁复硬编码问题

大厂技术 坚持周更 精选好文 背景介绍 业务是否写了大量 if-else?是否受够了这些 if-else 还要经常变动? 业务是否做了大量抽象,发现新业务场景还是用不上?...流程图式实现 Activiti、 Flowable 实现: 流程图式实现,应该是我们最常想到编排方式了~ 看起来非常简洁易懂,通过特殊设计,去掉一些不必要线,可以把 UI 做更简洁一些...AND 所有子节点中,有一个返回 false 该节点也将是 false,全部是 true 才是 true,在执行到 false 地方终止执行,类似于 Java &&。...ANY 所有子节点中,有一个返回 true 该节点也将是 true,全部 false 则 false,在执行到 true 地方终止执行,类似于 Java ||。...在 ice ,只需要稍微修改一下: 如图,引入一个负责更改时间节点 TimeChangeNone(更改包裹requestTime),后面的节点执行都是依赖于包裹时间即可,TimeChangeNone

1.7K30

前50个Python面试问题(最受欢迎)

#3)说明列表,元组,集合和字典,并至少提供一个可以使用这些集合类型每一个实例。 回答: 列表:可以在运行时更改不同数据类型项目的集合。 元组:不能更改不同数据类型项目的集合。...答:这是在实例化对象时执行第一个函数。这等效于C ++构造函数概念。 #15)对象方法“ self”参数意义是什么?我们是否应该始终将此参数命名为“ self”?...答:参数“ self”用于引用对象属性。 “ self”参数应该对象属性为前缀。问题第二部分答案是“否”。“ self”参数可以有任何名称。...#22)由于Python更适合服务器端应用程序,因此在服务器代码实现线程非常重要。如何在Python实现? 答:我们应该使用线程模块来实现,控制和销毁线程,以并行执行服务器代码。...这与Java功能非常相似。 因此,您应用程序代码中发生内存泄漏机会非常少。 #24)相同Python代码是否可以在多个平台上运行而无需任何更改? 答:可以。

5.1K30

札记:Java异常处理

接下来我们结合Java提供异常处理机制来学习下如何在正常程序逻辑中加入异常处理代码。...你依然可以对返回值做很多约定,使用参数来携带异常信息也是受限),而是定义了Throwable相关层次来表示异常。...而getStackTrace返回一个数组,StackTraceElement表示调用栈中一个调用有关信息,名,方法名和语句行号等。...如果没有合适异常,就可以设计自己Exception子类(可以继承某个已有异常,或者设计自己异常层次,不过异常层次不应该过于“深”,而应该保持扁平——更容易理解)。...否则随着方法调用传递,其它更多方法被动声明了那些完全不可能发生异常。 早抛出,晚捕获 早抛出:异常抛出地方应该足够及时,距离异常情形原因最近地方

1.2K80

stackoverflow上一个最会举例子专家

Java API上下文中, Hashtable是一个过时,它来自Java 1.1之前集合框架。...对于低耦合更改一个主要内容不应该影响另一个。高耦合会使您难以更改和维护代码; 由于课程紧密相连,因此进行更改可能需要对整个系统进行改造。 良好软件设计具有高内聚力和低耦合性。 ?...如何在非线程对象上调用wait()和notify()方法? 如何在不是线程对象上调用wait()和notify()方法?那真的没有意义,是吗?...我认为cpp比java更好地封装,java做得太多了,它把概念直接放到了Object,好吧,这让人们在开始时感到困惑。...Spring @Transactional - 隔离,传播 有人可以通过现实世界例子解释注释隔离和传播参数@Transactional。基本上何时以及为什么我应该选择更改其默认值。 ? ? ?

61050

创建型设计模式简介

new 运算符通常被认为是有害,因为它会将对象分散到整个应用程序。 随着时间推移,由于变得紧密耦合,因此更改实现变得具有挑战性。...工厂设计模式或工厂方法设计模式是 Java 中最常用设计模式之一。...什么时候使用工厂方法设计模式 当接口或抽象实现预计会频繁更改时 当当前实现不能舒适地适应新变化时 当初始化过程比较简单,构造函数只需要少量参数时 抽线工厂设计模式 在上一节,我们看到了如何使用工厂方法设计模式来创建与单个系列相关对象...要支持新类型对象,需要更改 AbstractFactory 及其所有子类。 Builder设计模式 Builder 设计模式是另一种创建模式,旨在处理相对复杂对象构造。...有很多强制和可选参数时 当构造函数参数数量增加导致构造函数列表很大时 当客户端期望构造对象有不同表示时 结论 在本文中,我们了解了 Java 创建设计模式。

37710

资格老辈子教你如何写出同事无法维护代码?

操作符,但实际功能并不是取反,让其返回一个整数。于是,如果你使用 ! ! 操作符,那么,有意思事就发生了—— 先是调用重载 ! 操作符,然后把其返回整数给 ! 成了 布尔变量,如果是 !!!...如果你改变了类型,那么你不一定能改变所有的地方。而编译器可能能检查到,也可能检查不到。 利用Java冗余。...写一个listener,然后让你所有的button都使用这个listener,这样你可以在这个listener整出一大堆if…else…语句,相当刺激。 使用三维数组。...(getenv() – C++ / System.getProperty() – Java ),那么,你应该把你成员初始化使用环境变量,而不是构造函数。 使用Magic number。...这个文档还有很多很多,实在是太TMD强大了,大家自己去看看吧。有精力有能力朋友不妨把其翻译成中文。

12210

SonarQube检测出bug、漏洞以及异味修复整理

定义一个Random,然后在方法可以重复使用,但是我按照这个方法试了一下没发现并不可行,导入下面的两个包都会报错,应该是需要什么额外jar包才行感觉。 ?...上面代码都是报这个bug,提示不应该按照名称来比较。 不要求名是唯一,只要它们在包是唯一。 因此,尝试根据名确定对象类型是一种充满危险练习。...但是说实话提取常量这个异味真的很枯燥,并且代码中有大量这种情况,感觉每个项目或者每个模块都应该提取一个常量,这样这个模块用到这些不变字符串,就直接从这个获取,但是这个工作量有点大哈哈,我就简单尝试了一下...下面代码是对上面的进行简单函数抽离,消除异味 ? 16.关于代码很多stitch分支问题。 ? ?...然后像这种有很多if-else ifgetsql()方法圈复杂度肯定是超过了,这里比较好方法我也不知道怎么做,但是我是将整个分成多个一样if-else if方法。

22.5K65

Java程序员必备技能《上》

我之前画过很多思维导图: 知识星球免费共享 但是很多人都成了收藏家,打开图一点点看,感觉没有文档形式来地直接。 本文是《Java必备知识篇(上)》,咱们开始正题。...JDK常用 在 JDK(Java Development Kit),有许多常用,这些提供了丰富功能和工具,用于在Java编程处理各种任务。...以下是一些常见 Linux 命令,Java 程序员应该掌握这些命令以便在 Linux 环境更高效地工作: ls:列出当前目录下文件和子目录。 ls cd:切换工作目录。...加载机制、双亲委派模式、打破双亲委派模型、自定义加载器 运行时数据区: 可以适当了解一下JDK各版本区别 JVM 将内存分为不同区域,包括方法区、堆、栈、程序计数器和本地方法栈。...集成其他工具: 与 IDE 整合:掌握如何在常见集成开发环境 IntelliJ IDEA、Eclipse 中使用 Maven。

14310

Java 程序员应在2019年学习10条面向对象(OOP)设计原则

这已在Spring 框架很好地实现,此设计原理优点在于DI 框架注入任何都易于使用模拟对象进行测试,并且易于维护,因为创建对象代码放在框架比放在客户端代码要好很多。...9.使用接口而不是实现 始终使用接口而不是使用实现编程,这将导致灵活代码可以与任何新接口实现一起使用。 因此,在Java对变量,方法返回类型或方法参数类型使用接口类型。...他们向我们展示了如何在编码和Java程序中使用设计原理。...Java开发工具包遵循许多设计原则,例如BorderFactoryFactory Pattern,Runtime Singleton模式,各种java.ioDecorator模式。...归根结底,专业程序员应该始终努力实现高度凝聚力和松散耦合解决方案,代码或设计。从Apache和Google寻找开源代码是学习Java和OOP设计原理一些好方法。

52630

JavaScript SOLID 原则

当我们(函数、组件、服务)做很多东西,那就会得到一堆关联代码,如果改动一处可能会影响到其他地方,这些地方其实没有相关性。...”反模式(“上帝模式”:一个做了太多事情,或者把很多不相关逻辑放到了一个来完成)。...我们需要为他们每一个创建一个新,定义类型并在getTotalAreas添加新if/else。 **注意:** **O - 开闭原则**。...看起来没有什么问题,我们只是删除并替换了4行代码,但就像我们之前讨论,如果你在很多文件多次使用了local Storage,很难找到所有使用地方并正确修改它们。...一个在应用其他地方已经开始使用,就不应该再修改它。 3、里氏替换原则(LSP):派生子类应该是可替换基,也就是说任何基可以出现地方,都可以被子类替换。

37820

Conccrent Unsafe原理 以及 原子类AutomicXX原理以及对Unsafe使用

Unsafe介绍 Java基于操作系统级别的原子操作sun.misc.Unsafe,它是Java对大多数锁机制实现最基础。...sun.misc.Unsafe提供原子操作基于操作系统直接对CPU进行操作,而以下这些方法又是sun.misc.Unsafe中经常被使用java不能直接访问操作系统底层,而是通过本地方法来访问...这两个方法用于返回定义某个属性在主存设定偏移量。...请注意CAS过程是sun.misc.Unsafe除了获取内存偏移量以外,提供最重要功能了——因为Java很多基于“无同步锁”方式功能实现原理都是基于CAS过程。   ...; } else { System.out.println("更改失败!"); } 首先创建一个UserPojo实例对象,这个实例对象有三个属性name、sex和userId。

79420
领券