Abstract constant in java












13















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?










share|improve this question









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
    Mar 19 at 10:42






  • 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
    Mar 19 at 10:42











  • Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

    – RealSkeptic
    Mar 19 at 10:47











  • 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
    Mar 19 at 10:54











  • @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
    Mar 19 at 15:06
















13















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?










share|improve this question









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
    Mar 19 at 10:42






  • 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
    Mar 19 at 10:42











  • Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

    – RealSkeptic
    Mar 19 at 10:47











  • 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
    Mar 19 at 10:54











  • @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
    Mar 19 at 15:06














13












13








13








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?










share|improve this question









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






share|improve this question









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.











share|improve this question









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.









share|improve this question




share|improve this question








edited Mar 19 at 11:01









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 Mar 19 at 10:37









Julien MaretJulien Maret

685




685




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
    Mar 19 at 10:42






  • 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
    Mar 19 at 10:42











  • Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

    – RealSkeptic
    Mar 19 at 10:47











  • 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
    Mar 19 at 10:54











  • @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
    Mar 19 at 15:06



















  • the question is how is this solved with serialVersionUID? So it's possible somehow...

    – Philipp Sander
    Mar 19 at 10:42






  • 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
    Mar 19 at 10:42











  • Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

    – RealSkeptic
    Mar 19 at 10:47











  • 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
    Mar 19 at 10:54











  • @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
    Mar 19 at 15:06

















the question is how is this solved with serialVersionUID? So it's possible somehow...

– Philipp Sander
Mar 19 at 10:42





the question is how is this solved with serialVersionUID? So it's possible somehow...

– Philipp Sander
Mar 19 at 10:42




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
Mar 19 at 10:42





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
Mar 19 at 10:42













Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

– RealSkeptic
Mar 19 at 10:47





Also, serialVersionUID is not mandatory for the runtime, either. If it doesn't exist, the serialization mechanism calculates it.

– RealSkeptic
Mar 19 at 10:47













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
Mar 19 at 10:54





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
Mar 19 at 10:54













@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
Mar 19 at 15:06





@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
Mar 19 at 15:06












5 Answers
5






active

oldest

votes


















10














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;
}





share|improve this answer

































    12














    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.






    share|improve this answer

































      2














      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






      share|improve this answer


























      • @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
        Mar 19 at 15:07



















      1














      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.






      share|improve this answer































        0














        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";
        }





        share|improve this answer










        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
          Mar 19 at 14:28











        • 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
          Mar 19 at 15:11











        • 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
          Mar 19 at 16:06











        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.










        draft saved

        draft discarded


















        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









        10














        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;
        }





        share|improve this answer






























          10














          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;
          }





          share|improve this answer




























            10












            10








            10







            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;
            }





            share|improve this answer















            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;
            }






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Mar 19 at 13:08

























            answered Mar 19 at 10:38









            Karol DowbeckiKarol Dowbecki

            24.8k93759




            24.8k93759

























                12














                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.






                share|improve this answer






























                  12














                  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.






                  share|improve this answer




























                    12












                    12








                    12







                    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.






                    share|improve this answer















                    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.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Mar 19 at 10:50

























                    answered Mar 19 at 10:43









                    Mikhail VladimirovMikhail Vladimirov

                    11.1k12631




                    11.1k12631























                        2














                        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






                        share|improve this answer


























                        • @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
                          Mar 19 at 15:07
















                        2














                        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






                        share|improve this answer


























                        • @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
                          Mar 19 at 15:07














                        2












                        2








                        2







                        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






                        share|improve this answer















                        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







                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Mar 19 at 15:08









                        Captain Man

                        3,28532755




                        3,28532755










                        answered Mar 19 at 10:52









                        ave4496ave4496

                        1,47531436




                        1,47531436













                        • @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
                          Mar 19 at 15:07



















                        • @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
                          Mar 19 at 15:07

















                        @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
                        Mar 19 at 15:07





                        @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
                        Mar 19 at 15:07











                        1














                        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.






                        share|improve this answer




























                          1














                          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.






                          share|improve this answer


























                            1












                            1








                            1







                            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.






                            share|improve this answer













                            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.







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Mar 19 at 15:04









                            Captain ManCaptain Man

                            3,28532755




                            3,28532755























                                0














                                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";
                                }





                                share|improve this answer










                                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
                                  Mar 19 at 14:28











                                • 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
                                  Mar 19 at 15:11











                                • 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
                                  Mar 19 at 16:06
















                                0














                                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";
                                }





                                share|improve this answer










                                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
                                  Mar 19 at 14:28











                                • 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
                                  Mar 19 at 15:11











                                • 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
                                  Mar 19 at 16:06














                                0












                                0








                                0







                                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";
                                }





                                share|improve this answer










                                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";
                                }






                                share|improve this answer










                                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.









                                share|improve this answer



                                share|improve this answer








                                edited Mar 19 at 14:29





















                                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 Mar 19 at 13:26









                                Julien MaretJulien Maret

                                685




                                685




                                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
                                  Mar 19 at 14:28











                                • 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
                                  Mar 19 at 15:11











                                • 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
                                  Mar 19 at 16:06



















                                • 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
                                  Mar 19 at 14:28











                                • 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
                                  Mar 19 at 15:11











                                • 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
                                  Mar 19 at 16:06

















                                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
                                Mar 19 at 14:28





                                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
                                Mar 19 at 14:28













                                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
                                Mar 19 at 15:11





                                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
                                Mar 19 at 15:11













                                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
                                Mar 19 at 16:06





                                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
                                Mar 19 at 16:06










                                Julien Maret is a new contributor. Be nice, and check out our Code of Conduct.










                                draft saved

                                draft discarded


















                                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.




                                draft saved


                                draft discarded














                                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





















































                                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







                                Popular posts from this blog

                                Færeyskur hestur Heimild | Tengill | Tilvísanir | LeiðsagnarvalRossið - síða um færeyska hrossið á færeyskuGott ár hjá færeyska hestinum

                                He _____ here since 1970 . Answer needed [closed]What does “since he was so high” mean?Meaning of “catch birds for”?How do I ensure “since” takes the meaning I want?“Who cares here” meaningWhat does “right round toward” mean?the time tense (had now been detected)What does the phrase “ring around the roses” mean here?Correct usage of “visited upon”Meaning of “foiled rail sabotage bid”It was the third time I had gone to Rome or It is the third time I had been to Rome

                                Slayer Innehåll Historia | Stil, komposition och lyrik | Bandets betydelse och framgångar | Sidoprojekt och samarbeten | Kontroverser | Medlemmar | Utmärkelser och nomineringar | Turnéer och festivaler | Diskografi | Referenser | Externa länkar | Navigeringsmenywww.slayer.net”Metal Massacre vol. 1””Metal Massacre vol. 3””Metal Massacre Volume III””Show No Mercy””Haunting the Chapel””Live Undead””Hell Awaits””Reign in Blood””Reign in Blood””Gold & Platinum – Reign in Blood””Golden Gods Awards Winners”originalet”Kerrang! Hall Of Fame””Slayer Looks Back On 37-Year Career In New Video Series: Part Two””South of Heaven””Gold & Platinum – South of Heaven””Seasons in the Abyss””Gold & Platinum - Seasons in the Abyss””Divine Intervention””Divine Intervention - Release group by Slayer””Gold & Platinum - Divine Intervention””Live Intrusion””Undisputed Attitude””Abolish Government/Superficial Love””Release “Slatanic Slaughter: A Tribute to Slayer” by Various Artists””Diabolus in Musica””Soundtrack to the Apocalypse””God Hates Us All””Systematic - Relationships””War at the Warfield””Gold & Platinum - War at the Warfield””Soundtrack to the Apocalypse””Gold & Platinum - Still Reigning””Metallica, Slayer, Iron Mauden Among Winners At Metal Hammer Awards””Eternal Pyre””Eternal Pyre - Slayer release group””Eternal Pyre””Metal Storm Awards 2006””Kerrang! Hall Of Fame””Slayer Wins 'Best Metal' Grammy Award””Slayer Guitarist Jeff Hanneman Dies””Bullet-For My Valentine booed at Metal Hammer Golden Gods Awards””Unholy Aliance””The End Of Slayer?””Slayer: We Could Thrash Out Two More Albums If We're Fast Enough...””'The Unholy Alliance: Chapter III' UK Dates Added”originalet”Megadeth And Slayer To Co-Headline 'Canadian Carnage' Trek”originalet”World Painted Blood””Release “World Painted Blood” by Slayer””Metallica Heading To Cinemas””Slayer, Megadeth To Join Forces For 'European Carnage' Tour - Dec. 18, 2010”originalet”Slayer's Hanneman Contracts Acute Infection; Band To Bring In Guest Guitarist””Cannibal Corpse's Pat O'Brien Will Step In As Slayer's Guest Guitarist”originalet”Slayer’s Jeff Hanneman Dead at 49””Dave Lombardo Says He Made Only $67,000 In 2011 While Touring With Slayer””Slayer: We Do Not Agree With Dave Lombardo's Substance Or Timeline Of Events””Slayer Welcomes Drummer Paul Bostaph Back To The Fold””Slayer Hope to Unveil Never-Before-Heard Jeff Hanneman Material on Next Album””Slayer Debut New Song 'Implode' During Surprise Golden Gods Appearance””Release group Repentless by Slayer””Repentless - Slayer - Credits””Slayer””Metal Storm Awards 2015””Slayer - to release comic book "Repentless #1"””Slayer To Release 'Repentless' 6.66" Vinyl Box Set””BREAKING NEWS: Slayer Announce Farewell Tour””Slayer Recruit Lamb of God, Anthrax, Behemoth + Testament for Final Tour””Slayer lägger ner efter 37 år””Slayer Announces Second North American Leg Of 'Final' Tour””Final World Tour””Slayer Announces Final European Tour With Lamb of God, Anthrax And Obituary””Slayer To Tour Europe With Lamb of God, Anthrax And Obituary””Slayer To Play 'Last French Show Ever' At Next Year's Hellfst””Slayer's Final World Tour Will Extend Into 2019””Death Angel's Rob Cavestany On Slayer's 'Farewell' Tour: 'Some Of Us Could See This Coming'””Testament Has No Plans To Retire Anytime Soon, Says Chuck Billy””Anthrax's Scott Ian On Slayer's 'Farewell' Tour Plans: 'I Was Surprised And I Wasn't Surprised'””Slayer””Slayer's Morbid Schlock””Review/Rock; For Slayer, the Mania Is the Message””Slayer - Biography””Slayer - Reign In Blood”originalet”Dave Lombardo””An exclusive oral history of Slayer”originalet”Exclusive! Interview With Slayer Guitarist Jeff Hanneman”originalet”Thinking Out Loud: Slayer's Kerry King on hair metal, Satan and being polite””Slayer Lyrics””Slayer - Biography””Most influential artists for extreme metal music””Slayer - Reign in Blood””Slayer guitarist Jeff Hanneman dies aged 49””Slatanic Slaughter: A Tribute to Slayer””Gateway to Hell: A Tribute to Slayer””Covered In Blood””Slayer: The Origins of Thrash in San Francisco, CA.””Why They Rule - #6 Slayer”originalet”Guitar World's 100 Greatest Heavy Metal Guitarists Of All Time”originalet”The fans have spoken: Slayer comes out on top in readers' polls”originalet”Tribute to Jeff Hanneman (1964-2013)””Lamb Of God Frontman: We Sound Like A Slayer Rip-Off””BEHEMOTH Frontman Pays Tribute To SLAYER's JEFF HANNEMAN””Slayer, Hatebreed Doing Double Duty On This Year's Ozzfest””System of a Down””Lacuna Coil’s Andrea Ferro Talks Influences, Skateboarding, Band Origins + More””Slayer - Reign in Blood””Into The Lungs of Hell””Slayer rules - en utställning om fans””Slayer and Their Fans Slashed Through a No-Holds-Barred Night at Gas Monkey””Home””Slayer””Gold & Platinum - The Big 4 Live from Sofia, Bulgaria””Exclusive! Interview With Slayer Guitarist Kerry King””2008-02-23: Wiltern, Los Angeles, CA, USA””Slayer's Kerry King To Perform With Megadeth Tonight! - Oct. 21, 2010”originalet”Dave Lombardo - Biography”Slayer Case DismissedArkiveradUltimate Classic Rock: Slayer guitarist Jeff Hanneman dead at 49.”Slayer: "We could never do any thing like Some Kind Of Monster..."””Cannibal Corpse'S Pat O'Brien Will Step In As Slayer'S Guest Guitarist | The Official Slayer Site”originalet”Slayer Wins 'Best Metal' Grammy Award””Slayer Guitarist Jeff Hanneman Dies””Kerrang! Awards 2006 Blog: Kerrang! Hall Of Fame””Kerrang! Awards 2013: Kerrang! Legend”originalet”Metallica, Slayer, Iron Maien Among Winners At Metal Hammer Awards””Metal Hammer Golden Gods Awards””Bullet For My Valentine Booed At Metal Hammer Golden Gods Awards””Metal Storm Awards 2006””Metal Storm Awards 2015””Slayer's Concert History””Slayer - Relationships””Slayer - Releases”Slayers officiella webbplatsSlayer på MusicBrainzOfficiell webbplatsSlayerSlayerr1373445760000 0001 1540 47353068615-5086262726cb13906545x(data)6033143kn20030215029