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))
advice 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<String>
getActualTableNames(final String targetDataSource) {
Collection<String> result =
datasourceToTablesMap.get(targetDataSource);
if (null == result) {
result = Collections.emptySet();
}
return result;
}
advice code ?? Use Map.getOrDefault().
public Collection<String>
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<String> doSharding(final
Collection<String> 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<String> doSharding(final
Collection<String> 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<String> 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.