* -beans.xml与equals和hashCode

2020-09-29 22:11发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在谈论此功能: https://wiki。 hybris.com/display/release5/Generating+Beans+and+Enums (我想它是core +功能的简化后备端口,不是吗?)

无论如何,到目前为止,我还没有办法让它为指定的bean生成hashCode,equals或toString。 对于某些豆,我们需要它们。 在这种情况下有什么建议?

关于MD

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在谈论此功能: https://wiki。 hybris.com/display/release5/Generating+Beans+and+Enums (我想它是core +功能的简化后备端口,不是吗?)

无论如何,到目前为止,我还没有办法让它为指定的bean生成hashCode,equals或toString。 对于某些豆,我们需要它们。 在这种情况下有什么建议?

关于MD

付费偷看设置
发送
3条回答
空代码
1楼-- · 2020-09-29 22:59

我曾经希望避免这种情况。

无论如何,我玩了一个模板,这个模板应该可以解决问题。 至少对于基本的东西。

仍然不可能从equals/hashCode/toString中排除某些成员-很高兴为此拥有一个属性,但是看起来这是可以得到的:

 包$ packageName;
 
  #foreach($ import中的$ i)
  汇入$ i;
  #结束
  #if(!$ imports.isEmpty())
 
  #结束
  #if($ hasDescription)
/**
  * $说明
  */
  #结束
  公共类$ shortClassName #if($ superclassShortName)扩展$ superclassShortName #else实现java.io.Serializable #end
  {
 
  #foreach($ v在$ memberVariables中)
      $ v.comment
      私人$ v.type $ v.name;
  #结束
 
      公开$ {constructorName}(){}
 
  #foreach($ v在$ memberVariables中)
      #if($ v.overridden)@Override #end
 
      public void set $ {StringUtils.capitalize($ v.name)}(最终$ {v.type} $ {v.name}){
          this。$ {v.name} = $ {v.name};
      }
 
      #if($ v.overridden)@Override #end
      #if($ v.type =='boolean')
 
      公开$ v.type为$ {StringUtils.capitalize($ v.name)}()
      {
      返回$ v.name;
      }
      #其他
 
      公开$ v.type get $ {StringUtils.capitalize($ v.name)}()
      {
      返回$ v.name;
      }
      #结束
 
  #结束
 
      @Override
      public boolean equals(final Object o){
          如果(this == o){
              返回true;
          }
          if(!(o instanceof $ shortClassName)){
              返回false;
          }
          最后的$ shortClassName =($ shortClassName)o;
 
          #foreach($ v在$ memberVariables中)
              #if($ v.type =='boolean'|| $ v.type =='char'|| $ v.type =='byte'|| $ v.type =='short'|| $ v。  type =='int'|| $ v.type =='long')
              if($ v.name!= that。$ v.name){
                  返回false;
              }
              #elseif($ v.type =='float')
              if(Float.compare(that。$ {v.name},$ {v.name})!= 0){
                  返回false;
              }
              #elseif($ v.type =='double')
              if(Double.compare(that。$ {v.name},$ {v.name})!= 0){
                  返回false;
              }
              #其他
              if($ v.name!= null?!$ {v.name} .equals(that。$ v.name):that。$ v.name!= null){
                  返回false;
              }
              #结束
          #结束
 
          返回true;
      }
 
      @Override
      public int hashCode(){
          int结果= 0;
 
          #foreach($ v在$ memberVariables中)
              #if($ v.type =='boolean')
              结果= 31 *结果+($ {v.name}?1:0);
              #elseif($ v.type =='float')
              结果= 31 *结果+($ {v.name}!= + 0.0f?Float.floatToIntBits($ {v.name}):0);
              #elseif($ v.type =='double')
              long temp = Double.doubleToLongBits($ {v.name});
              结果= 31 *结果+(int)(温度^(温度>>> 32));
              #elseif($ v.type =='long')
              结果= 31 *结果+(int)($ {v.name} ^($ {v.name} >>> 32));
              #elseif($ v.type =='char'|| $ v.type =='byte'|| $ v.type =='short'|| $ v.type =='int')
              结果= 31 *结果+(int)$ {v.name};
              #其他
              结果= 31 *结果+($ {v.name}!= null?$ {v.name} .hashCode():0);
              #结束
          #结束
 
          返回结果;
      }
 
      @Override
      公共字符串toString(){
          返回" $ {shortClassName} [" +
              #foreach($ v在$ memberVariables中)
              " $ {v.name} ='" + $ {v.name} +"'," +
              #结束
          "]";
      }
 
  }
  
nice_wp
2楼-- · 2020-09-29 23:04

如果您在bean属性中指定了 equals =" true" (并且在上为 superEquals =" true" bean(如有必要),将为包含此属性的bean生成 equals() hashCode()。 例如:

  
      
      
  

  

对于 toString(),您必须使用上面已经提到的自定义模板。

Alawn_Xu
3楼-- · 2020-09-29 22:51

一周热门 更多>