Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)

Préface

Il s'agit d'une version qui réécrit la valeur de la variable a en utilisant Javassist de "Je veux sortir vrai avec un == 1 && a == 2 && a == 3 même en Java".

La source

EqualsA.java


package com.example;

public class EqualsA {

	private int a;

	public void execute() {
		System.out.println("start");

		if (a == 1 && a == 2 && a == 3) {
			System.out.println(true);
		} else {
			System.out.println(false);
		}

		System.out.println("end");
	}
}

EqualsMain.java


package com.example;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.expr.ExprEditor;
import javassist.expr.FieldAccess;

public class EqualsMain {

	public static void main(String[] args) throws Exception {
		convert();

		new EqualsA().execute();
	}

	static void convert() throws Exception {
		ClassPool classPool = ClassPool.getDefault();
		CtClass cc = classPool.get("com.example.EqualsA");
		cc.instrument(new ExprEditor() {

			private int i = 1;

			@Override
			public void edit(FieldAccess f) throws CannotCompileException {
				if (f.getFieldName().equals("a")) {
					f.replace(String.format("$_ = %d;", i++));
				}
			}
		});

		cc.toClass();
	}
}

ExprEditor ne semble pas être capable de gérer les variables locales, mais il peut gérer les champs.

Bonus (Scala)

object EqualsA {
  def main(args: Array[String]): Unit = {
    val a = Int(1)
    if (a == 1 && a == 2 && a == 3) {
      println("true")
    } else {
      println("false")
    }
  }

  case class Int(n: scala.Int) {
    override def equals(other: Any) = true
  }
}

Recommended Posts

Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (Royal road edition qui n'est ni magique ni rien)
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je veux ForEach un tableau avec une expression Lambda en Java
Sortie true avec if (a == 1 && a == 2 && a == 3) en Java (identifiant invisible)
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Je veux créer un fichier Parquet même en Ruby
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je souhaite envoyer un e-mail en Java.
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Je veux utiliser java8 forEach avec index
rsync4j --Je veux toucher rsync en Java.
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
Je veux être finalement même à kotlin
J'ai essayé de casser le bloc avec java (1)
Je veux faire quelque chose comme "cls" en Java
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Je veux utiliser une petite icône dans Rails
J'ai essayé de créer une compétence Clova en Java
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai essayé de créer une fonction de connexion avec Java
Je souhaite définir une fonction dans la console Rails
Je veux faire des transitions d'écran avec kotlin et java!
Je veux cliquer sur une broche GoogleMap dans RSpec
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
Je souhaite renvoyer un objet au format CSV avec en-tête et filtre multilignes en Java
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je voulais juste créer une propriété réactive en Java
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai créé un client RESAS-API en Java
Je veux implémenter diverses fonctions avec kotlin et java!
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
[Moteur CQ] Je souhaite gérer des collections comme Stream ou .Net LINQ même dans Java 7.
Je veux FlashAttribute au printemps même si j'ai défini un proxy inverse! (ne pas faire)
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
J'ai créé un PDF avec Java.
J'ai essayé d'interagir avec Java
Enregistrer la sortie dans un fichier en Java
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je veux revenir à l'écran précédent avec kotlin et java!
Je veux extraire entre des chaînes de caractères avec une expression régulière
[Wire Mock] Je souhaite configurer un serveur stub / simulé en Java et effectuer des tests E2E.
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Je souhaite développer une application web!
Je veux écrire un joli build.gradle