有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javabeans对象中包含对象的javabeans性能

我正在开发一个bean类,它具有多面属性(name有名字、姓氏和中间名)。请比较我的两种方法,以便在我的应用程序中使用相同的方法

方法1:

public class SampleVO {
String firstName;
String middleName;
String lastName;
// getters and setters
}

方法2:

//Main object
public class SampleVO1 {
NameVO name = new NameVO();
// getters and setters
}
//Name object
public class NameVO {
    String firstName;
    String middleName;
    String lastName;
    // getters and setters
}

注:以上仅为示例。要求对一组属性进行分组。以上哪种性能/规范标准是好的


共 (3) 个答案

  1. # 1 楼答案

    这实际上取决于您的用例。如果您需要NameVO其他地方,或者将firstNamemiddleNamelastName封装在一个单独的对象中对您更有意义,那么请使用第二种解决方案。如果这对你来说没有意义,就拿第一个吧

    这两种解决方案都不应该存在任何性能问题。如果要使用第二种解决方案,可以为SampleVO1中的NameVO属性提供getter和setter。比如说:

    public class SampleVO1 {
        protected NameVO nameVo = new NameVO();
    
        public String getFirstName() {
            return nameVo.getFirstName();
        }
    
        public void setFirstName(String firstName) {
            this.nameVo.setFirstName(firstName);
        }
    
        // etc.
    }
    
  2. # 2 楼答案

    首先,确保它们是私有的/受保护的。他们不应该在自己的班级之外直接访问:

    public class NameVO {
      protected String firstName;
      protected String middleName;
      protected String lastName;
    // getters and setters
    }
    

    如果SampleVO1不仅仅是初始化类,那么方法2是可取的

  3. # 3 楼答案

    一个单一的间接层次通常并不重要。您看到的延迟通常是一次内存访问,即4-200个时钟周期。对于优化代码,通常小于10纳秒

    注意:每个字符串对象中都有两级间接寻址。如果间接寻址破坏了您的性能,那么您将不仅仅使用原语或堆外内存,而不是String

    简言之,成本只是使用一个字符串的成本的一小部分

    在考虑性能问题时,您应该从最简单、最清晰的实现开始,只有当您度量了性能问题时,才应该出于性能原因修改代码,并且您应该测试您的更改,因为您的“改进”通常会更差,或者没有更好,只是更复杂