Frage zu reflection

Status
Nicht offen für weitere Antworten.

JFeel-x

Mitglied
Hallo :D ,
man kann ja mit java.lang.reflect sogar private aushebeln(http://www.javaspecialists.eu/archive/Issue014.html).

Kann man auch den Wert einer Variable die final ist verändern?

Danke für die Hilfe im voraus :toll:
PS(Bevor einer fragt): Ich will nichts knacken, aber ich würde gerne innerhal eines eigenes Programmes unter gegebenen Umständen ein Field, das auf final steht verändern...
 
S

SlaterB

Gast
testen -> wissen

oder wenn es nicht klappt, dann zumindest das entsprechene 15 Zeilen-Testprogramm hier posten,
damit es andere modifizieren können, so sie denn weitere Ideen haben
 

JFeel-x

Mitglied
Code:
import java.lang.reflect.Field;

public final class Password {
    private final String realPassword;
    
    Field f = null;
    
	public Password(String password){
		
	this.realPassword = password;	
	
	}
    public boolean isPassword(String password){
    	
    return this.realPassword.equals(password);	
    
    }
    
	public static void main(String[] args) {//Zum testen
	Password p = new Password("123");
	System.out.println("p.isPassword(\"123\")           "+p.isPassword("123"));
	System.out.println("p.newPassword(\"222\",\"123\" ) "+p.newPassword("222","123" ));
	System.out.println("p.newPassword(\"123\",\"222\" ) "+p.newPassword("123","222" ));
	}
    public boolean newPassword(String oldPassword,String password){
    	
    if(this.isPassword(oldPassword)){
    
    try {
		f = this.getClass().getDeclaredField("realPassword");
	} catch (SecurityException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (NoSuchFieldException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    f.setAccessible(true);
    //private schon mal weg
    //f.??? 	
	return true;
    }
    return false;
    }
}

das Field f möchte ich verändern, geht das überhaupt?

Nochmal danke für die schnelle Antwort !
 

JFeel-x

Mitglied
Ich hab es schlecht formuliert, ich weiß schon, dass das mit set nicht geht, ich wollte nur wissen, ob es da ein methödchen gibt, dass final deaktivieren kann.
 

thE_29

Top Contributor
Java Api bei set: If the underlying field is final, the method throws an IllegalAccessException
 
S

SlaterB

Gast
Code:
public final class Password
{
    private String realPassword1 = "123";
    private final String realPassword2 = "12345";

    public void newPassword()
        throws Exception
    {
        Field f = this.getClass().getDeclaredField("realPassword1");
        f.setAccessible(true);
        f.set(this, "new realPassword1");

        f = this.getClass().getDeclaredField("realPassword2");
        f.setAccessible(true);
        f.set(this, "new realPassword2");
    }

    public String toString()
    {
        try
        {
            Field f = this.getClass().getDeclaredField("realPassword2");
            f.setAccessible(true);

            return realPassword1 + " - " + realPassword2 + " - " + f.get(this);
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        Password p = new Password();
        System.out.println(p);
        p.newPassword();
        System.out.println(p);
    }
}
-----

Ausgabe:
123 - 12345 - 12345
new realPassword1 - 12345 - new realPassword2
siehe
http://stuffthathappens.com/blog/2007/10/13/you-can-change-final-fields/
wie ich gerade bei google gesehen hatte, nachdem es auf dem normalen Weg nicht klappt

-----

http://www.google.de/search?hl=de&q=java+reflection+final+change&meta=
für mehr Artikel

----
bzw
http://www.javaspecialists.eu/archive/Issue096.html
(nicht gelesen, nur auch in obiger Suche zu finden)
 
S

SlaterB

Gast
thE_29 hat gesagt.:
Java Api bei set: If the underlying field is final, the method throws an IllegalAccessException

meinst du

*

If the underlying field is final, the method throws an
* <code>IllegalAccessException</code> unless
* <code>setAccessible(true)</code> has succeeded for this field
* and this field is non-static.

? ;)
 

thE_29

Top Contributor
Naja, du darfst es also erst im Konstruktor instanzieren, weil wer greift mit reflection auf den Wert drauf zu?!

Nachtrag:
@SlaterB: Ich hab nur die Java 1.4 API und da steht das nicht:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html#set(java.lang.Object,%20java.lang.Object)

^^
Da ich ja noch immer ein 1.4 Coder bin :bae:
 
M

maki

Gast
Zumindest sollte klar sein, dass es eine ganz schlechte Idee ist, zu versuchen final Variablen editierbar zu machen.
 

JFeel-x

Mitglied
Vielen Dank, ich hab falsch gegooglet, nehm ich an :)

Jedoch ist mein Field ja ein String, es gibt ja nur setChar, man könnte höchstens jeden einzelnen char verändern, aber ich würde ja immer nur den ersten slot des char[]s verändern :bahnhof:

Ich glaub, ich steh grad auf dem Schlauch
 
S

SlaterB

Gast
um einen neuen String zu setzen gibts die set-Methode, siehe mein Beispiel, auch ein neues char[] kann man damit übergeben,
was deine Frage genau ist und zu welchem Thema (gehts nun darum einen String intern zu verändern?), ist relativ unklar
 

JFeel-x

Mitglied
Sorry, ich hab 2 Fehler gemacht,
1. hab dein Beispiel glatt übersehen, :shock:
2. hab als ersten Parameter von set immer "this" angegeben *handandenkopfschlag

Alles klar, vielen Dank :applaus: :applaus: :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Frage zu Reflection Java Basics - Anfänger-Themen 8
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
H Frage zum Array Java Basics - Anfänger-Themen 17
G Schach -Frage 2- Maussteuerung Java Basics - Anfänger-Themen 7
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
B Fachliche Frage bei Rechnungen Java Basics - Anfänger-Themen 16
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben