Hi,All the friends of ShardingShpere community.
We judge the use of null in ShardingShpere, sorted out 7 types.
We have suggested changes to some of the code, and we hope that the community 
will provide your valuable Suggestions as well.

1 : To determine whether the object is null, then need to transform it. Here 
are some examples.

1.1​
current code :result.setUrl(null == dataSourceName ? 
databaseEnvironment.getURL():databaseEnvironment.getURL(dataSourceName))    
a​dvice  code 
:Optional.ofNullable(dataSourceName).map(databaseEnvironment::getURL).orElse(databaseEnvironment.getURL())
  1.2
    current code : return null == loadBalanceStrategyConfiguration? 
serviceLoader.newService(): 
serviceLoader.newService(loadBalanceStrategyConfiguration.getType(),loadBalanceStrategyConfiguration.getProperties()); advice
  code  : return 
Optional.ofNullable(loadBalanceStrategyConfiguration).map(e -> 
serviceLoader.newService(e.getType(),e.getProperties())).orElse(serviceLoader.newService())
  1.3
    current code : return null == 
shardingRuleConfig.getDefaultKeyGeneratorConfig() ? null : 
shardingRuleConfig.getDefaultKeyGeneratorConfig().getColumn();
    advice  code : return 
Optional.ofNullable(shardingRuleConfig.getDefaultKeyGeneratorConfig()).map(KeyGeneratorConfiguration::getColumn).orElse(null)
  1.4
    current code : return null == shardingStrategyConfiguration? new 
NoneShardingStrategy() : 
ShardingStrategyFactory.newInstance(shardingStrategyConfiguration);    
advice  code : return 
Optional.ofNullable(shardingStrategyConfiguration).map(ShardingStrategyFactory::newInstance).orElse(new
 NoneShardingStrategy())
2 : Object is judged with null. Here are some examples.

  2.1
    current code :       public void xxx(Object o){
    if(null == o){
     retrun;
   }
       }
  2.2
    current code :       public boolean wasNull() {
    return null == currentRow;
       }  advice : Use the objects.isNull() provided by JDK8.

3 : Use the ternary operator to determine whether the object is null, then 
returns itself or other. Here are some examples.

  3.1
    current code : this.loadBalanceAlgorithm = null == loadBalanceAlgorithm ? 
new MasterSlaveLoadBalanceAlgorithmServiceLoader().newService() : 
loadBalanceAlgorithm;    advice  code : this.loadBalanceAlgorithm = 
Optional.ofNullable(loadBalanceAlgorithm).orElse(new 
MasterSlaveLoadBalanceAlgorithmServiceLoader().newService())
  3.2
    current code : currentDataSourceName = null == currentDataSourceName ? 
shardingRule.getShardingDataSourceNames().getRandomDataSourceName() : 
currentDataSourceName;    advice  code : currentDataSourceName = 
Optional.ofNullable(currentDataSourceName).orElse(shardingRule.getShardingDataSourceNames().getRandomDataSourceName())
  3.3
    current code : return null == tableRule.getDatabaseShardingStrategy() ? 
defaultDatabaseShardingStrategy : tableRule.getDatabaseShardingStrategy();    
advice  code : return 
Optional.ofNullable(tableRule.getDatabaseShardingStrategy()).orElse(defaultDatabaseShardingStrategy)
  3.4
    current code : return null == results.get(0) ? 0 : results.get(0);    
advice  code : return Optional.ofNullable(results.get(0)).orElse(0);
  3.5
    current code : return null == getSqlStatement().getTable() ? 
Collections.emptyList() : 
Collections.singletonList(getSqlStatement().getTable());    advice  code : 
return 
Optional.ofNullable(getSqlStatement().getTable()).map(Collections::singletonList).orElse(Collections.emptyList());
4 :  Get the value of the Map by key, and then determines that the value is 
null. Here are some examples.

  4.1
    current code :public Collection getActualTableNames(final String 
targetDataSource) {
     Collection result = 
datasourceToTablesMap.get(targetDataSource);
     if (null == result) {
        result = Collections.emptySet();
     }
     return result;
}   advice code : Use Map.getOrDefault() public 
Collection getActualTableNames(final String targetDataSource) {
     return datasourceToTablesMap.getOrDefault(targetDataSource, 
Collections.emptySet());
}
5 : To determine whether the object is null, but returns Optional wrapped. Here 
are some examples.=

  5.1
    current code : return null == alias ? Optional.empty() : 
Optional.ofNullable(alias.getIdentifier().getValue());    advice  code : return 
Optional.ofNullable(alias).map(e -> e.getIdentifier().getValue());
6 : Determine if the object is null, throw exception, and proceed to the next 
step. Here are some examples.

  6.1
    current code :private Collection doSharding(final 
Collection availableTargetNames, final RangeRouteValue shardingValue) 
{
      if (null == rangeShardingAlgorithm) {
          throw new 
UnsupportedOperationException("Cannot find range sharding strategy in sharding 
rule.");
      }
      return 
rangeShardingAlgorithm.doSharding(availableTargetNames,
                new 
RangeShardingValue(shardingValue.getTableName(), shardingValue.getColumnName(), 
shardingValue.getValueRange()));
}    advice  code :private Collection doSharding(final 
Collection availableTargetNames, final RangeRouteValue shardingValue) 
{
        return 
Optional.ofNullable(rangeShardingAlgorithm).map(e -> 
e.doSharding(availableTargetNames,
                   new 
RangeShardingValue(shardingValue.getTableName(), shardingValue.getColumnName(), 
shardingValue.getValueRange())))
                  
.orElseThrow(()-> new UnsupportedOperationException("Cannot find range 
sharding strategy in sharding rule."));
}

7 : Judge Collection is Empty. Here are some examples.

  7.1
    current code :private boolean isEmptyDataNodes(final List dataNodes) {
      return null == dataNodes || dataNodes.isEmpty();
}    advice :Unify judgment with Collection Tool.

Thank you for wasting your precious time reading, and the ShardingShpere 
community welcomes your best Suggestions for the above code.

Reply via email to