Abstract constant in java
I would like to create a constant not implemented in super class in order to force subclasses to implement it. The best solution that I've found (on this topic) is to create an abstract method that will return the constant value. I assume that it is impossible to do something like:
abstract final static String Name;
But I still have hope because Java uses something like this in Serializable interface with the serialVersionUID. Did someone know how did they do this? Is it possible to reproduce it in my own class?
java
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
|
show 1 more comment
I would like to create a constant not implemented in super class in order to force subclasses to implement it. The best solution that I've found (on this topic) is to create an abstract method that will return the constant value. I assume that it is impossible to do something like:
abstract final static String Name;
But I still have hope because Java uses something like this in Serializable interface with the serialVersionUID. Did someone know how did they do this? Is it possible to reproduce it in my own class?
java
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
4
FYI, in theSerializablecase it's the runtime that wants theserialVersionUID, not the compiler. A class that implementsSerializableand doesn't have that field compiles just fine.
– Federico klez Culloca
yesterday
Also,serialVersionUIDis not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.
– RealSkeptic
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday
|
show 1 more comment
I would like to create a constant not implemented in super class in order to force subclasses to implement it. The best solution that I've found (on this topic) is to create an abstract method that will return the constant value. I assume that it is impossible to do something like:
abstract final static String Name;
But I still have hope because Java uses something like this in Serializable interface with the serialVersionUID. Did someone know how did they do this? Is it possible to reproduce it in my own class?
java
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I would like to create a constant not implemented in super class in order to force subclasses to implement it. The best solution that I've found (on this topic) is to create an abstract method that will return the constant value. I assume that it is impossible to do something like:
abstract final static String Name;
But I still have hope because Java uses something like this in Serializable interface with the serialVersionUID. Did someone know how did they do this? Is it possible to reproduce it in my own class?
java
java
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited yesterday
zb226
5,80232954
5,80232954
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
Julien MaretJulien Maret
635
635
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
4
FYI, in theSerializablecase it's the runtime that wants theserialVersionUID, not the compiler. A class that implementsSerializableand doesn't have that field compiles just fine.
– Federico klez Culloca
yesterday
Also,serialVersionUIDis not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.
– RealSkeptic
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday
|
show 1 more comment
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
4
FYI, in theSerializablecase it's the runtime that wants theserialVersionUID, not the compiler. A class that implementsSerializableand doesn't have that field compiles just fine.
– Federico klez Culloca
yesterday
Also,serialVersionUIDis not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.
– RealSkeptic
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
4
4
FYI, in the
Serializable case it's the runtime that wants the serialVersionUID, not the compiler. A class that implements Serializable and doesn't have that field compiles just fine.– Federico klez Culloca
yesterday
FYI, in the
Serializable case it's the runtime that wants the serialVersionUID, not the compiler. A class that implements Serializable and doesn't have that field compiles just fine.– Federico klez Culloca
yesterday
Also,
serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.– RealSkeptic
yesterday
Also,
serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.– RealSkeptic
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday
|
show 1 more comment
5 Answers
5
active
oldest
votes
serialVersionUID field presence is not enforced by the Serializable interface because interface can't enforce presence of a field. You can declare a class which implements Serializable, it will compile just fine without serialVersionUID field being there.
The check for serialVersionUID field is hardcoded in the tools. One example is JDK java.io.ObjectStreamClass.getSerialVersionUID() methods that loads the serialVersionUID value with reflection:
/**
* Returns explicit serial version UID value declared by given class, or
* null if none.
*/
private static Long getDeclaredSUID(Class<?> cl) {
try {
Field f = cl.getDeclaredField("serialVersionUID");
int mask = Modifier.STATIC | Modifier.FINAL;
if ((f.getModifiers() & mask) == mask) {
f.setAccessible(true);
return Long.valueOf(f.getLong(null));
}
} catch (Exception ex) {
}
return null;
}
add a comment |
Such constant cannot be static because static fields are shared among all instances of the class, including instances of all subclasses.
Here is how to implement this as non-static constant:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
BTW, serialVersionUID is not a part of Serializable interface.
add a comment |
I wouldn't recommend it but if you need it so much you could create a regex check in Checkstyle and force people to implement the static variable
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
add a comment |
When a class implementing Serializable does not have a serialVersionUID the little message you see in your IDE and while compiling is a warning emitted by javac. If you want to create something like that you can but the process seems complicated. The solution is here in this answer.
They go into detail but the general idea is to create an annotation and annotation processor and use the annotation processor during compilation. I'm guessing you could use reflection (or... not reflection since it is compile time?) to see if the annotated class contains the field you want.
add a comment |
Here the best way I found to simulate it. Javadoc prevent prevent a bit to bad extends... but id subclass dont have NAME it will just fail to execute
public abstract class Foo {
protected final String NAME;
public Foo() {
String name="";
try {
name = (String) this.getClass().getDeclaredField("NAME").get(name);
} catch (NoSuchFieldException
| SecurityException
| IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
NAME = name;
}
}
public class Bar extends Foo {
public static final String NAME = "myName";
}
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to setNAMEtoFoo.NAMEin the catch block, right? That way if they don't "override" it it will use the "default"?
– Captain Man
yesterday
Why are you passing the emptyStringreferenced bynameto thegetmethod declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked thatNAMEdoes exist, what do you gain from that? Are you aware that this code will break when you create a subclass ofBar?
– Holger
yesterday
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
});
}
});
Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.
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%2f55238966%2fabstract-constant-in-java%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
serialVersionUID field presence is not enforced by the Serializable interface because interface can't enforce presence of a field. You can declare a class which implements Serializable, it will compile just fine without serialVersionUID field being there.
The check for serialVersionUID field is hardcoded in the tools. One example is JDK java.io.ObjectStreamClass.getSerialVersionUID() methods that loads the serialVersionUID value with reflection:
/**
* Returns explicit serial version UID value declared by given class, or
* null if none.
*/
private static Long getDeclaredSUID(Class<?> cl) {
try {
Field f = cl.getDeclaredField("serialVersionUID");
int mask = Modifier.STATIC | Modifier.FINAL;
if ((f.getModifiers() & mask) == mask) {
f.setAccessible(true);
return Long.valueOf(f.getLong(null));
}
} catch (Exception ex) {
}
return null;
}
add a comment |
serialVersionUID field presence is not enforced by the Serializable interface because interface can't enforce presence of a field. You can declare a class which implements Serializable, it will compile just fine without serialVersionUID field being there.
The check for serialVersionUID field is hardcoded in the tools. One example is JDK java.io.ObjectStreamClass.getSerialVersionUID() methods that loads the serialVersionUID value with reflection:
/**
* Returns explicit serial version UID value declared by given class, or
* null if none.
*/
private static Long getDeclaredSUID(Class<?> cl) {
try {
Field f = cl.getDeclaredField("serialVersionUID");
int mask = Modifier.STATIC | Modifier.FINAL;
if ((f.getModifiers() & mask) == mask) {
f.setAccessible(true);
return Long.valueOf(f.getLong(null));
}
} catch (Exception ex) {
}
return null;
}
add a comment |
serialVersionUID field presence is not enforced by the Serializable interface because interface can't enforce presence of a field. You can declare a class which implements Serializable, it will compile just fine without serialVersionUID field being there.
The check for serialVersionUID field is hardcoded in the tools. One example is JDK java.io.ObjectStreamClass.getSerialVersionUID() methods that loads the serialVersionUID value with reflection:
/**
* Returns explicit serial version UID value declared by given class, or
* null if none.
*/
private static Long getDeclaredSUID(Class<?> cl) {
try {
Field f = cl.getDeclaredField("serialVersionUID");
int mask = Modifier.STATIC | Modifier.FINAL;
if ((f.getModifiers() & mask) == mask) {
f.setAccessible(true);
return Long.valueOf(f.getLong(null));
}
} catch (Exception ex) {
}
return null;
}
serialVersionUID field presence is not enforced by the Serializable interface because interface can't enforce presence of a field. You can declare a class which implements Serializable, it will compile just fine without serialVersionUID field being there.
The check for serialVersionUID field is hardcoded in the tools. One example is JDK java.io.ObjectStreamClass.getSerialVersionUID() methods that loads the serialVersionUID value with reflection:
/**
* Returns explicit serial version UID value declared by given class, or
* null if none.
*/
private static Long getDeclaredSUID(Class<?> cl) {
try {
Field f = cl.getDeclaredField("serialVersionUID");
int mask = Modifier.STATIC | Modifier.FINAL;
if ((f.getModifiers() & mask) == mask) {
f.setAccessible(true);
return Long.valueOf(f.getLong(null));
}
} catch (Exception ex) {
}
return null;
}
edited yesterday
answered yesterday
Karol DowbeckiKarol Dowbecki
24.5k93658
24.5k93658
add a comment |
add a comment |
Such constant cannot be static because static fields are shared among all instances of the class, including instances of all subclasses.
Here is how to implement this as non-static constant:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
BTW, serialVersionUID is not a part of Serializable interface.
add a comment |
Such constant cannot be static because static fields are shared among all instances of the class, including instances of all subclasses.
Here is how to implement this as non-static constant:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
BTW, serialVersionUID is not a part of Serializable interface.
add a comment |
Such constant cannot be static because static fields are shared among all instances of the class, including instances of all subclasses.
Here is how to implement this as non-static constant:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
BTW, serialVersionUID is not a part of Serializable interface.
Such constant cannot be static because static fields are shared among all instances of the class, including instances of all subclasses.
Here is how to implement this as non-static constant:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
BTW, serialVersionUID is not a part of Serializable interface.
edited yesterday
answered yesterday
Mikhail VladimirovMikhail Vladimirov
10.8k12630
10.8k12630
add a comment |
add a comment |
I wouldn't recommend it but if you need it so much you could create a regex check in Checkstyle and force people to implement the static variable
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
add a comment |
I wouldn't recommend it but if you need it so much you could create a regex check in Checkstyle and force people to implement the static variable
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
add a comment |
I wouldn't recommend it but if you need it so much you could create a regex check in Checkstyle and force people to implement the static variable
I wouldn't recommend it but if you need it so much you could create a regex check in Checkstyle and force people to implement the static variable
edited yesterday
Captain Man
3,28532754
3,28532754
answered yesterday
ave4496ave4496
1,46531436
1,46531436
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
add a comment |
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
@JulienMaret Checkstyle is not just an Eclipse plugin. It can also be part of your build process like Maven. I don't think this is a good solution but just want to point out it is not actually IDE specific.
– Captain Man
yesterday
add a comment |
When a class implementing Serializable does not have a serialVersionUID the little message you see in your IDE and while compiling is a warning emitted by javac. If you want to create something like that you can but the process seems complicated. The solution is here in this answer.
They go into detail but the general idea is to create an annotation and annotation processor and use the annotation processor during compilation. I'm guessing you could use reflection (or... not reflection since it is compile time?) to see if the annotated class contains the field you want.
add a comment |
When a class implementing Serializable does not have a serialVersionUID the little message you see in your IDE and while compiling is a warning emitted by javac. If you want to create something like that you can but the process seems complicated. The solution is here in this answer.
They go into detail but the general idea is to create an annotation and annotation processor and use the annotation processor during compilation. I'm guessing you could use reflection (or... not reflection since it is compile time?) to see if the annotated class contains the field you want.
add a comment |
When a class implementing Serializable does not have a serialVersionUID the little message you see in your IDE and while compiling is a warning emitted by javac. If you want to create something like that you can but the process seems complicated. The solution is here in this answer.
They go into detail but the general idea is to create an annotation and annotation processor and use the annotation processor during compilation. I'm guessing you could use reflection (or... not reflection since it is compile time?) to see if the annotated class contains the field you want.
When a class implementing Serializable does not have a serialVersionUID the little message you see in your IDE and while compiling is a warning emitted by javac. If you want to create something like that you can but the process seems complicated. The solution is here in this answer.
They go into detail but the general idea is to create an annotation and annotation processor and use the annotation processor during compilation. I'm guessing you could use reflection (or... not reflection since it is compile time?) to see if the annotated class contains the field you want.
answered yesterday
Captain ManCaptain Man
3,28532754
3,28532754
add a comment |
add a comment |
Here the best way I found to simulate it. Javadoc prevent prevent a bit to bad extends... but id subclass dont have NAME it will just fail to execute
public abstract class Foo {
protected final String NAME;
public Foo() {
String name="";
try {
name = (String) this.getClass().getDeclaredField("NAME").get(name);
} catch (NoSuchFieldException
| SecurityException
| IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
NAME = name;
}
}
public class Bar extends Foo {
public static final String NAME = "myName";
}
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to setNAMEtoFoo.NAMEin the catch block, right? That way if they don't "override" it it will use the "default"?
– Captain Man
yesterday
Why are you passing the emptyStringreferenced bynameto thegetmethod declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked thatNAMEdoes exist, what do you gain from that? Are you aware that this code will break when you create a subclass ofBar?
– Holger
yesterday
add a comment |
Here the best way I found to simulate it. Javadoc prevent prevent a bit to bad extends... but id subclass dont have NAME it will just fail to execute
public abstract class Foo {
protected final String NAME;
public Foo() {
String name="";
try {
name = (String) this.getClass().getDeclaredField("NAME").get(name);
} catch (NoSuchFieldException
| SecurityException
| IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
NAME = name;
}
}
public class Bar extends Foo {
public static final String NAME = "myName";
}
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to setNAMEtoFoo.NAMEin the catch block, right? That way if they don't "override" it it will use the "default"?
– Captain Man
yesterday
Why are you passing the emptyStringreferenced bynameto thegetmethod declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked thatNAMEdoes exist, what do you gain from that? Are you aware that this code will break when you create a subclass ofBar?
– Holger
yesterday
add a comment |
Here the best way I found to simulate it. Javadoc prevent prevent a bit to bad extends... but id subclass dont have NAME it will just fail to execute
public abstract class Foo {
protected final String NAME;
public Foo() {
String name="";
try {
name = (String) this.getClass().getDeclaredField("NAME").get(name);
} catch (NoSuchFieldException
| SecurityException
| IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
NAME = name;
}
}
public class Bar extends Foo {
public static final String NAME = "myName";
}
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Here the best way I found to simulate it. Javadoc prevent prevent a bit to bad extends... but id subclass dont have NAME it will just fail to execute
public abstract class Foo {
protected final String NAME;
public Foo() {
String name="";
try {
name = (String) this.getClass().getDeclaredField("NAME").get(name);
} catch (NoSuchFieldException
| SecurityException
| IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
NAME = name;
}
}
public class Bar extends Foo {
public static final String NAME = "myName";
}
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited yesterday
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered yesterday
Julien MaretJulien Maret
635
635
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Julien Maret is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to setNAMEtoFoo.NAMEin the catch block, right? That way if they don't "override" it it will use the "default"?
– Captain Man
yesterday
Why are you passing the emptyStringreferenced bynameto thegetmethod declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked thatNAMEdoes exist, what do you gain from that? Are you aware that this code will break when you create a subclass ofBar?
– Holger
yesterday
add a comment |
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to setNAMEtoFoo.NAMEin the catch block, right? That way if they don't "override" it it will use the "default"?
– Captain Man
yesterday
Why are you passing the emptyStringreferenced bynameto thegetmethod declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked thatNAMEdoes exist, what do you gain from that? Are you aware that this code will break when you create a subclass ofBar?
– Holger
yesterday
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
Are you sure the code will not compile? Your code looks like it will not only compile, but also run without error since you catch the exception ?
– Falco
yesterday
I think you would want to set
NAME to Foo.NAME in the catch block, right? That way if they don't "override" it it will use the "default"?– Captain Man
yesterday
I think you would want to set
NAME to Foo.NAME in the catch block, right? That way if they don't "override" it it will use the "default"?– Captain Man
yesterday
Why are you passing the empty
String referenced by name to the get method declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked that NAME does exist, what do you gain from that? Are you aware that this code will break when you create a subclass of Bar?– Holger
yesterday
Why are you passing the empty
String referenced by name to the get method declared by your (sub)class? That’s obviously never the right object for this operation. And when you have checked that NAME does exist, what do you gain from that? Are you aware that this code will break when you create a subclass of Bar?– Holger
yesterday
add a comment |
Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.
Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.
Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.
Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.
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%2f55238966%2fabstract-constant-in-java%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
the question is how is this solved with serialVersionUID? So it's possible somehow...
– Philipp Sander
yesterday
4
FYI, in the
Serializablecase it's the runtime that wants theserialVersionUID, not the compiler. A class that implementsSerializableand doesn't have that field compiles just fine.– Federico klez Culloca
yesterday
Also,
serialVersionUIDis not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.– RealSkeptic
yesterday
Even if it is not mandatory, it still ask for it. The serialVersionIUD is not the exact solution that I want, but it come close to it.
– Julien Maret
yesterday
@JulienMaret are you more concerned with emitting a warning if it is not there or do you want to get a default value if it is not? Or both?
– Captain Man
yesterday