You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@reef.apache.org by "WooYeonLee (JIRA)" <ji...@apache.org> on 2016/05/15 01:56:12 UTC
[jira] [Updated] (REEF-1390) Make Optional's toString() and
hashCode() computed on demand
[ https://issues.apache.org/jira/browse/REEF-1390?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
WooYeonLee updated REEF-1390:
-----------------------------
Description:
{{Optional}}'s constructor preloads {{valueStr}} and {{valueHash}} for its {{toString()}} and {{hashCode()}} methods respectively, even when those methods never be invoked during the life of the object.
{code}
private Optional(final T value) {
this.value = value;
this.valueStr = "Optional:{" + value + '}';
this.valueHash = value.hashCode();
}
{code}
It incurs unnecessary overhead, and the problem becomes worse if the size of value is huge and T's hashcode() requires heavy computation.
They should be done in {{toString()}} and {{hashCode()}} methods on demand, respectively like below:
{code}
private Optional(final T value) {
this.value = value;
}
@Override
public String toString() {
return "Optional:{" + this.value + '}';
}
@Override
public int hashCode() {
return this.value.hashCode();
}
{code}
+As a related issue, when {{value}} is null, it's better to return a reference of a {{static}} variable for empty Optional, not making separated objects every time. The following is the current code.
{code}
public static <T> Optional<T> empty() {
return new Optional<>();
}
{code}
was:
{{Optional}}'s constructor preloads {{valueStr}} and {{valueHash}} for its {{toString()}} and {{hashCode()}} methods respectively, even when those methods never be invoked during the life of the object.
{code}
private Optional(final T value) {
this.value = value;
this.valueStr = "Optional:{" + value + '}';
this.valueHash = value.hashCode();
}
{code}
It incurs unnecessary overhead, and the problem becomes worse if the size of T is huge and T's hashcode() requires heavy computation.
They should be done in {{toString()}} and {{hashCode()}} methods on demand, respectively like below:
{code}
private Optional(final T value) {
this.value = value;
}
@Override
public String toString() {
return "Optional:{" + this.value + '}';
}
@Override
public int hashCode() {
return this.value.hashCode();
}
{code}
+As a related issue, when {{value}} is null, it's better to return a reference of a {{static}} variable for empty Optional, not making separated objects every time. The following is the current code.
{code}
public static <T> Optional<T> empty() {
return new Optional<>();
}
{code}
> Make Optional's toString() and hashCode() computed on demand
> ------------------------------------------------------------
>
> Key: REEF-1390
> URL: https://issues.apache.org/jira/browse/REEF-1390
> Project: REEF
> Issue Type: Improvement
> Components: REEF
> Reporter: WooYeonLee
> Priority: Minor
> Labels: easyfix, performance
> Fix For: 0.15
>
>
> {{Optional}}'s constructor preloads {{valueStr}} and {{valueHash}} for its {{toString()}} and {{hashCode()}} methods respectively, even when those methods never be invoked during the life of the object.
> {code}
> private Optional(final T value) {
> this.value = value;
> this.valueStr = "Optional:{" + value + '}';
> this.valueHash = value.hashCode();
> }
> {code}
> It incurs unnecessary overhead, and the problem becomes worse if the size of value is huge and T's hashcode() requires heavy computation.
> They should be done in {{toString()}} and {{hashCode()}} methods on demand, respectively like below:
> {code}
> private Optional(final T value) {
> this.value = value;
> }
> @Override
> public String toString() {
> return "Optional:{" + this.value + '}';
> }
> @Override
> public int hashCode() {
> return this.value.hashCode();
> }
> {code}
> +As a related issue, when {{value}} is null, it's better to return a reference of a {{static}} variable for empty Optional, not making separated objects every time. The following is the current code.
> {code}
> public static <T> Optional<T> empty() {
> return new Optional<>();
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)