Will calling an enum with an object reference as a value create an object every time it's called?
This became my concern mainly because of this:
public enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
The Host
class is Spring @ConfigurationProperties
annotated to be injected with values from an application.properties
file at runtime. If I write that as a value of an enum
, will it create a new object instance of Host
every time I use Method.POST?
java enums
add a comment |
This became my concern mainly because of this:
public enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
The Host
class is Spring @ConfigurationProperties
annotated to be injected with values from an application.properties
file at runtime. If I write that as a value of an enum
, will it create a new object instance of Host
every time I use Method.POST?
java enums
1
Shouldn't, theoretically.POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 '18 at 7:10
add a comment |
This became my concern mainly because of this:
public enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
The Host
class is Spring @ConfigurationProperties
annotated to be injected with values from an application.properties
file at runtime. If I write that as a value of an enum
, will it create a new object instance of Host
every time I use Method.POST?
java enums
This became my concern mainly because of this:
public enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
The Host
class is Spring @ConfigurationProperties
annotated to be injected with values from an application.properties
file at runtime. If I write that as a value of an enum
, will it create a new object instance of Host
every time I use Method.POST?
java enums
java enums
asked Nov 22 '18 at 7:02
Rigo SarmientoRigo Sarmiento
14510
14510
1
Shouldn't, theoretically.POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 '18 at 7:10
add a comment |
1
Shouldn't, theoretically.POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 '18 at 7:10
1
1
Shouldn't, theoretically.
POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)– ernest_k
Nov 22 '18 at 7:10
Shouldn't, theoretically.
POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)– ernest_k
Nov 22 '18 at 7:10
add a comment |
2 Answers
2
active
oldest
votes
No, It will create instance only once. This can be checked with a print statement like below. Here getAssets()
and constructor has been called only once:
public class Host {
public static void main(String args) {
System.out.println("Hello World!");
System.out.println(Method.POST);
System.out.println(Method.POST);
System.out.println(Method.POST);
}
Host()
{
System.out.println("--------------");
}
String getAssets()
{
System.out.println("ssssssssssss");
return "eeee";
}
}
enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
O/P:
Hello World!
--------------
ssssssssssss
POST
POST
POST
add a comment |
All values
of an Enumerator
are singletons
, which means, they are initialized once and reused every time you access it. So you can see the "definition" of an Enumerator Value as 'Constructor'.
This also means: if you provide a setter for the property "method" and change its value at runtime, the next access will return the new value! singleton
does not mean its value is final
.
public enum Method {
POST(new Host().getAssets()), // definition
GET("GET"),// definition
DELETE("DELETE"),// definition
PUT("PUT");// definition
private String method;
// Constructor
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53425466%2fwill-calling-an-enum-with-an-object-reference-as-a-value-create-an-object-every%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
No, It will create instance only once. This can be checked with a print statement like below. Here getAssets()
and constructor has been called only once:
public class Host {
public static void main(String args) {
System.out.println("Hello World!");
System.out.println(Method.POST);
System.out.println(Method.POST);
System.out.println(Method.POST);
}
Host()
{
System.out.println("--------------");
}
String getAssets()
{
System.out.println("ssssssssssss");
return "eeee";
}
}
enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
O/P:
Hello World!
--------------
ssssssssssss
POST
POST
POST
add a comment |
No, It will create instance only once. This can be checked with a print statement like below. Here getAssets()
and constructor has been called only once:
public class Host {
public static void main(String args) {
System.out.println("Hello World!");
System.out.println(Method.POST);
System.out.println(Method.POST);
System.out.println(Method.POST);
}
Host()
{
System.out.println("--------------");
}
String getAssets()
{
System.out.println("ssssssssssss");
return "eeee";
}
}
enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
O/P:
Hello World!
--------------
ssssssssssss
POST
POST
POST
add a comment |
No, It will create instance only once. This can be checked with a print statement like below. Here getAssets()
and constructor has been called only once:
public class Host {
public static void main(String args) {
System.out.println("Hello World!");
System.out.println(Method.POST);
System.out.println(Method.POST);
System.out.println(Method.POST);
}
Host()
{
System.out.println("--------------");
}
String getAssets()
{
System.out.println("ssssssssssss");
return "eeee";
}
}
enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
O/P:
Hello World!
--------------
ssssssssssss
POST
POST
POST
No, It will create instance only once. This can be checked with a print statement like below. Here getAssets()
and constructor has been called only once:
public class Host {
public static void main(String args) {
System.out.println("Hello World!");
System.out.println(Method.POST);
System.out.println(Method.POST);
System.out.println(Method.POST);
}
Host()
{
System.out.println("--------------");
}
String getAssets()
{
System.out.println("ssssssssssss");
return "eeee";
}
}
enum Method {
POST(new Host().getAssets()),
GET("GET"),
DELETE("DELETE"),
PUT("PUT");
private String method;
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
O/P:
Hello World!
--------------
ssssssssssss
POST
POST
POST
answered Nov 22 '18 at 7:16
Shubhendu PramanikShubhendu Pramanik
2,4402719
2,4402719
add a comment |
add a comment |
All values
of an Enumerator
are singletons
, which means, they are initialized once and reused every time you access it. So you can see the "definition" of an Enumerator Value as 'Constructor'.
This also means: if you provide a setter for the property "method" and change its value at runtime, the next access will return the new value! singleton
does not mean its value is final
.
public enum Method {
POST(new Host().getAssets()), // definition
GET("GET"),// definition
DELETE("DELETE"),// definition
PUT("PUT");// definition
private String method;
// Constructor
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
add a comment |
All values
of an Enumerator
are singletons
, which means, they are initialized once and reused every time you access it. So you can see the "definition" of an Enumerator Value as 'Constructor'.
This also means: if you provide a setter for the property "method" and change its value at runtime, the next access will return the new value! singleton
does not mean its value is final
.
public enum Method {
POST(new Host().getAssets()), // definition
GET("GET"),// definition
DELETE("DELETE"),// definition
PUT("PUT");// definition
private String method;
// Constructor
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
add a comment |
All values
of an Enumerator
are singletons
, which means, they are initialized once and reused every time you access it. So you can see the "definition" of an Enumerator Value as 'Constructor'.
This also means: if you provide a setter for the property "method" and change its value at runtime, the next access will return the new value! singleton
does not mean its value is final
.
public enum Method {
POST(new Host().getAssets()), // definition
GET("GET"),// definition
DELETE("DELETE"),// definition
PUT("PUT");// definition
private String method;
// Constructor
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
All values
of an Enumerator
are singletons
, which means, they are initialized once and reused every time you access it. So you can see the "definition" of an Enumerator Value as 'Constructor'.
This also means: if you provide a setter for the property "method" and change its value at runtime, the next access will return the new value! singleton
does not mean its value is final
.
public enum Method {
POST(new Host().getAssets()), // definition
GET("GET"),// definition
DELETE("DELETE"),// definition
PUT("PUT");// definition
private String method;
// Constructor
Method(String s) {
method = s;
}
private String getMethod() {
return method;
}
}
answered Nov 22 '18 at 7:24
lumolumo
343313
343313
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53425466%2fwill-calling-an-enum-with-an-object-reference-as-a-value-create-an-object-every%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Shouldn't, theoretically.
POST
should be a singleton. And that should be easy to test (just add a line of logging to the constructor)– ernest_k
Nov 22 '18 at 7:10