优化-这段java代码如何优雅的实现?

问题描述

这段java代码如何优雅的实现?
for(AbstractResponse resp : responseList) {
        if (resp instanceof AResponse) {
                AResponse areponse = (AResponse)resp;
                //1
                //2
                //3
        }else if (resp instanceof BResponse) {
                BResponse breponse = (BResponse)resp;
                //1
                //2
                //3
        }else if (resp instanceof CResponse) {
                CResponse creponse = (CResponse)resp;
                //1
                //2
                //3
        }
}

不好意思,刚才写错了,修改了一下

解决方案

这代码有问题啊,for(AResponse resp : responseList) 这个地方初期化的resp一定是AResponse类,不可能走到else if里面的后面的代码都是多余的

解决方案二:

for(AResponse resp : responseList)
多谢关注,这个写错了,修改了一下

解决方案三:

已经很优雅了

解决方案四:

既然AResponse,BResponse,CResponse都是继承AbstractResponse,那直接在AbstractResponse 定义一个方法,让AResponse,BResponse,CResponse都实现这个方法,那在上面的程序调用时就不需要判断是否是AResponse,BResponse,CResponse了。
E.g.

abstract class AbstractResponse

{

abstract void print();

}

class AResponse extends AbstractResponse

{

public void print()

{

System.out.println("AResponse");

}

}

class BResponse extends AbstractResponse

{

public void print()

{

System.out.println("BResponse");

}

}

class CResponse extends AbstractResponse

{

public void print()

{

System.out.println("CResponse");

}

}

for(AbstractResponse resp : responseList) {
resp.print();
}

解决方案五:

应该就是java多态的表现方式啦!

解决方案六:

        Class<?> cClass = resp.getClass();
        Object temp = cClass.newInstance();
        temp = resp;
        直接使用java的反射机制 你可以试试效果

解决方案七:

    List<Object> abc = new ArrayList<Object>();
    Map<String,Object> d = new HashMap<String,Object>();
    d.put("abc", "abc");
    abc.add(d);

    Map<String,Object> e = new Hashtable<String,Object>();
    e.put("abc", "abc");
    abc.add(e);

    for(Object tempMap :abc){

        Class<?> cClass = tempMap.getClass();
        Object temp = cClass.newInstance();
        temp = tempMap;
        System.out.println("This is " + cClass);
        System.out.println(temp);
    }

解决方案八:

要优雅,有两个办法,一个是
AbstractResponse定义一个方法,它的派生类重写这个方法。
你循环直接调用,它会调用对应的派生类重写的不同方法

另一个,你不能或者不想改变AbstractResponse的代码。
那么可以使用泛型+策略模式,为每个类型编写一个策略实现类,在你的for里面,调用泛型方法,那么它会自动找策略类。

解决方案九:

这种结构已经很好了,易读。
如果想减少代码量,也是在 if else 分支特别多的情况下才有用,就这几个分支就不用考虑了。

如果一定要考虑,可以试试 for 循环。但前提是各分支中的处理要基本上相同,可以抽象出来。否则,也无法实现!

时间: 2025-01-20 17:32:00

优化-这段java代码如何优雅的实现?的相关文章

请教优化一段java代码

问题描述 请教各位,一下代码哪里能优化或者代码风格能优化的地方么,然后给个修改理由,非常感谢,初学java,希望知道哪样的才是工作中写的代码importorg.apache.commons.logging.LogFactory;publicclassAccountClass{privatefinaltransientstaticint[]values=newint[4];publicvoidaddValues(inti,intv){try{if(isOK(i)){values[i]=v;}}ca

Linkedin工程师是如何优化他们的Java代码的(转)

  英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公司主页以及客户端等多个分发渠道提供支撑(如下图所示). 在Feed Mixer里面用到了一个叫做SPR(念"super")的库.博文讲的就是如何优化SPR的java代码.下面就是他们总结的

Linkedin 工程师如何优化他们的 Java 代码

最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公司主页以及客户端等多个分发渠道提供支撑(如下图所示). 在Feed Mixer里面用到了一个叫做SPR(念"super")的库.博文讲的就是如何优化SPR的java代码.下面就是他们总结的优化经验. 1. 谨慎对待Java的循环遍历 Java中的列表遍历可比它看起来要麻烦多了.就以下面两段

线程-下面是一段Java代码,里面有几处看不懂,望大神指教,不胜感激。

问题描述 下面是一段Java代码,里面有几处看不懂,望大神指教,不胜感激. package 线程; import java.awt.*;import java.awt.event.*; import javax.swing.*; public class TestThread extends JFrame { /** * */ //private static final long serialVersionUID = 1L; JPanel jPanel1 = new JPanel(); JBu

页面上有个textarea,在里面写java代码,然后如何动态编译执行这段java代码??

问题描述 页面上有个textarea,在里面写java代码,然后如何动态编译执行这段java代码?? 页面上有个textarea,在里面写java代码,然后如何动态编译执行这段java代码?? 解决方案 可以使用一些前端的模板引擎,java是编译的 解决方案二: ajax提交客户端输入的代码动态执行就行,看下面参考 ajax提交http://www.w3school.com.cn/jquery/ java中怎么执行字符串中的代码http://bbs.csdn.net/topics/3903563

得到一段java代码,哪位大侠可以帮忙看看它的作用?

问题描述 得到一段java代码,哪位大侠可以帮忙看看它的作用?packageutil;importjava.io.*;importjava.util.Enumeration;importjava.util.Hashtable;importjavax.microedition.io.Connector;importjavax.microedition.io.HttpConnection;importnetpay.a;//Referencedclassesofpackageutil://bpubli

java-求解 这段 JAVA 代码 怎么改 才能运行 太晕了

问题描述 求解 这段 JAVA 代码 怎么改 才能运行 太晕了 public static char[] a(char[] paramArrayOfChar) { char[] arrayOfChar1 = new char[12]; char[] arrayOfChar2 = new char[12]; arrayOfChar2[0] = '?'; arrayOfChar2[1] = '?'; arrayOfChar2[2] = 'o'; arrayOfChar2[3] = '/'; arra

java8-谁能帮我解释下这段Java代码

问题描述 谁能帮我解释下这段Java代码 public class CollectionDemo { public static void main(String[] args) { Collection list= new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.iterator().forEachRemaining(lang->System.out.p

在下面这段java代码中,怎么获取文件大小 ,如果再加上图片尺寸更好。

问题描述 在下面这段java代码中,怎么获取文件大小 ,如果再加上图片尺寸更好. public static List> uploadFile(HttpServletRequest request, String[] params, Map values) throws Exception { List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); Multipa