Will calling an enum with an object reference as a value create an object every time it's called?
up vote
4
down vote
favorite
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 |
up vote
4
down vote
favorite
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.POSTshould be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 at 7:10
add a comment |
up vote
4
down vote
favorite
up vote
4
down vote
favorite
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 at 7:02
Rigo Sarmiento
1218
1218
1
Shouldn't, theoretically.POSTshould be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 at 7:10
add a comment |
1
Shouldn't, theoretically.POSTshould be a singleton. And that should be easy to test (just add a line of logging to the constructor)
– ernest_k
Nov 22 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 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 at 7:10
add a comment |
2 Answers
2
active
oldest
votes
up vote
2
down vote
accepted
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 |
up vote
1
down vote
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 |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
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 |
up vote
2
down vote
accepted
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 |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
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 at 7:16
Shubhendu Pramanik
2,3652719
2,3652719
add a comment |
add a comment |
up vote
1
down vote
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 |
up vote
1
down vote
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 |
up vote
1
down vote
up vote
1
down vote
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 at 7:24
lumo
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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.
POSTshould be a singleton. And that should be easy to test (just add a line of logging to the constructor)– ernest_k
Nov 22 at 7:10