Java: une classe parente peut-elle extraire de manière statique le nom de classe d’une classe enfant?

En ce qui concerne Java, je voudrais connaître statiquement le nom de la classe actuelle. A est la classe parente de B. Je voudrais avoir une chaîne statique dans A (classe parente) qui contient le nom de la classe actuelle, mais lorsque cette chaîne statique est référencée dans B (classe enfant), nom de classe de B. Est-ce possible?

Exemple:

public class Parent { protected static Ssortingng MY_CLASS_NAME = ??? . . . } public class Child extends Parent { public void testMethod() { if (MY_CLASS_NAME.equals(getClass().getName())) { System.out.println("We're equal!"); } } } 

Le seul moyen que je connaisse est le suivant: créez un constructeur protégé qui accepte Ssortingng dans la classe parente.

 class Parent { private final Ssortingng className; protected Parent(Ssortingng className) { this.className = className; } } public class Child extends Parent { public Child() { super("Child"); } } 

En passant, vous pouvez même améliorer cela en utilisant le new Throwable().getStackTrace() dans le custructor de paren. Dans ce cas, vous n’êtes même pas obligé de forcer tous les enfants à transmettre leur nom au parent.

 class Parent { private final Ssortingng className; protected Parent() { StackTraceElement[] trace = new Throwable().getStackTrace(); this.className = trace[1].getClassName(); } } 

Non, ce n’est pas possible Il n’y a qu’une copie de la chaîne statique (par ClassLoader), mais vous pouvez avoir plusieurs sous-classes.

Vous pouvez cependant avoir un champ statique par (sous-) classe, puis utiliser une méthode

 public class Child extends Parent { private static final Ssortingng NAME = "some alias"; @Override public Ssortingng getName() { return NAME; } } 

C’est une technique qui peut être utilisée pour éviter la reflection (le nom ne correspond souvent pas au nom de la classe, mais utilise un alias – il peut également être utilisé avec des énumérations au lieu de chaînes).

essayez ce code bien que vous ne puissiez pas le faire en utilisant une variable statique

  class Parent{ final Ssortingng className; public Parent(){ className=this.getClass().getName(); } } 

et le faire pour les sous-classes requirejses