首页
学习
活动
专区
工具
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)是一种事件驱动的无服务器计算服务,可以用于执行代码逻辑。您可以将不同的策略封装成云函数,并通过事件触发来执行相应的策略逻辑。详情请参考腾讯云函数产品介绍:腾讯云函数

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

相关·内容

Java中String类应该注意的一些地方

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

52310

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

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

37830
  • 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中树的了解有多少? ⊙ 这个培训机构怎么?

    1.1K40

    Java网络和代理

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

    1.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.7K51

    Java不可变类机制

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

    95920

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

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

    16.4K30

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

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

    5.5K40

    开源规则引擎——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

    2K30

    前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.3K80

    stackoverflow上一个最会举例子的专家

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

    64650

    创建型设计模式简介

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

    40610

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

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

    25K65

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

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

    17410

    JavaScript 中的 SOLID 原则

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

    43120

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

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

    54530

    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。

    83920

    Java程序员必读的10本书籍

    以下列出了10本书,对于任何希望提高Java知识和理解的Java程序员来说都是必不可少的。 如果你是一名程序员,想知道如何提高你对Java的了解或者成为更好的Java开发人员,那你就来对地方了。...当我还是个孩子的时候,我读了很多漫画,包括《超级突击队》(Super Commando Dhruv),他是我最喜欢的角色,因为他故事中的科学主题,以及他通常是如何凭借自己的大脑、智慧和对科学事实的简单了解打败更强大的敌人的...这本书教会了我为什么组合比继承更好,以及如何在不修改已经测试过的代码的情况下更改类的运行时行为。 您可能认为这只是另一本旧书,但不必担心,几年前发布了一份关于Java SE 8的更新版本。...如果您认真地学习Java中的设计模式,那么您应该阅读这本书! 5. Spring in Action ?...通过阅读本书,您可以轻松了解Java 8、Java 9和Java 10对其他版本的更改。 9.

    1.4K40
    领券