Java Rätsel

Hallo,

bin mir nicht ganz sicher ob ich deine Aufgabenstellung richtig verstehe *schäm*, aber wie wärs mit:

Code:
        for (int i = 1000-maxEntriesToKeep; i < 1000; i++) {
            lruMap.put(i, i);
        }

?

Gruß
DEV
 
Dann kannst du gleich folgendes verwenden^^:
Code:
for (int i = 990; i < 1000; i++) {
	lruMap.put(i, i);
}

PS: Die Frage ist schon knapp ein Jahr alt..
 
Zuletzt bearbeitet:
PS: Die Frage ist schon knapp ein Jahr alt..

Oh mann, das passiert mir heute schon das zweite mal :-(

Das passiert, weil unter den Threads immer so komische Vorschläge mit ähnlichen Threads kommen; leider sind die wohl größtenteils alt ....

Gruß
DEV
 
Auch wenn es jetzt schon ein Jahr her ist: was spricht gegen ein neues Rätsel? :)

Thema: Annotations

Gegeben ist die folgende Klasse:

Java:
package de.tutorials;

import java.util.Date;

public class AnnotationExample {
	private static String supUnused1 = "unused";
	private static String supDeprecation1 = "deprecation";
	private static final String supUnused2 = "unused";
	private static final String supDeprecation2 = "deprecation";
	private static final String[] suppressArray = { "unused", "deprecation" };

	public static void main(String[] args) {
		// Test 1
		@SuppressWarnings( { "unused", "deprecation" })
		new Date().getDay();

		// Test 2
		@SuppressWarnings( { "unused", "deprecation" })
		int a = new Date().getDay();

		// Test 3
		@SuppressWarnings( { supUnused1, supDeprecation1 })
		int b = new Date().getDay();

		// Test 4
		@SuppressWarnings( { supUnused2, supDeprecation2 })
		int c = new Date().getDay();

		// Test 5
		@SuppressWarnings(suppressArray)
		int d = new Date().getDay();
	}
}

Die Fragen sind:
- wie reagiert der Compiler mit Java 1.6?
- welche Tests funktionieren, welche nicht und warum nicht?
Der Code sollte wenns geht nicht vorher ausgeführt werden :)

Viel Spaß beim Knobeln (oder Wissen :))!

Viele Grüße,
MAN
 
Zuletzt bearbeitet:
Hallo,

wie sollen wir denn die Lösung angeben...?
Hier kommen mehere Dinge zusammen die man aber IMHO etzten endes aber alle unter der Kategorie Syntaxfehler abtun kann, wobei einige Fehler offensichtlich sind und andere eher subtil daher kommen ;-)

Gruß Tom
 
Okay, im Prinzip hast du vollkommen Recht dass es ausschließlich Syntaxfehler sind :)
Vielleicht ist es als Rätsel etwas unsinnig, aber dennoch eine gute Frage, warum der Compiler reagiert, wie er reagiert :)

Gerade beim ersten und fünften Test reagiert der Compiler meiner Meinung nach einfach falsch. Und wenn es richtig wäre, mit welcher genauen Erklärung?

Viele Grüße,
MAN
 
Bei 5 vielleicht aus den selben Grund, warum byte a = 5; byte b = 3; byte c = (byte)(a + b); gecastet werden muss: Weil der Wert zur Kompilerzeit noch nicht eindeutig bekannt ist. Vielleicht will er deshalb auch final's, und kein Array, da dessen Felder ja auch zwischen Intialisation und Verwendung auch verändert werden können.

:/
 
Zuletzt bearbeitet:
Hallo,

hier noch ein neues Rätsel für euch:

Wie erstellt man eine Instanz der Klasse X ohne den Code der Klasse X zu ändern (weder auf Sourcecode noch auf Bytecode Ebene)?

Java:
package de.tutorials.training;

import java.lang.reflect.Constructor;

public class SneakyObjectConstruction {
  
  public static void main(String[] args) throws Exception {

    try {
      System.out.println(X.class.newInstance());
    } catch (Throwable t) {
      System.out.println(t);
    }

    try {
      Constructor<?> ctor = X.class.getDeclaredConstructor();
      ctor.setAccessible(true);
      System.out.println(ctor.newInstance());
    } catch (Throwable t) {
      System.out.println(t);
    }
    
    //TODO insert your approach here :)
  }

  static class X {
    
    private int i = 1;
    
    private X() {
      if(i == 1){
        throw new IllegalStateException("i is 1");
      }
    }
  }
}

Viel Spaß,
Gruß Tom
 
Hallo zusammen,

hier die Äuflösung des Java Rätsels:
Java:
package de.tutorials.training;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;


// Our test driver
public class SneakyObjectConstruction {

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

    try {
      System.out.println(X.class.newInstance());
    } catch (Throwable t) {
      System.out.println(t);
    }

    try {
      Constructor<?> ctor = X.class.getDeclaredConstructor();
      ctor.setAccessible(true);
      System.out.println(ctor.newInstance());
    } catch (Throwable t) {
      System.out.println(((InvocationTargetException)t).getTargetException());
    }

    // Some working approaches :)

    //ReflectionFactory
    try {
      sun.reflect.ReflectionFactory reflectionFactory = sun.reflect.ReflectionFactory.getReflectionFactory();
      Constructor<X> ctor = reflectionFactory.newConstructorForSerialization(X.class, Object.class.getDeclaredConstructor());
      System.out.println("ReflectionFactory: " + ctor.newInstance());
    } catch (Throwable t) { 
      System.out.println(t);
    }

    //Unsafe
    Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
    f.setAccessible(true);
    sun.misc.Unsafe u = (sun.misc.Unsafe)f.get(null);
    System.out.println("Unsafe: " +  u.allocateInstance(X.class));

    //Method by Dr. Heinz Kabuts :)
    //See http://www.javaspecialists.eu/archive/Issue032.html
    System.out.println("Heinz Kabutz: " + Y.make());
  }
  
  static class X {

    private int i = 1;


    private X() {
       if(i == 1){
       throw new IllegalStateException("i is 1");
       }
    }
  }

  static class Y extends X {
    private static Y y;


    static Y make() {
      try {
        new Y();
      } catch (Exception ex) {
        try {
          synchronized (Y.class) {
            while (y == null) {
              System.gc();
              Y.class.wait(100);
            }
          }
        } catch (InterruptedException ie) {
          return null;
        }
      }
      return y;
    }


    @Override
    protected void finalize() throws Throwable {
      synchronized (Y.class) {
        y = this;
        Y.class.notify();
      }
    }
  }
}

Ausgabe:
Code:
java.lang.IllegalAccessException: Class de.tutorials.training.SneakyObjectConstruction can not access a member of class de.tutorials.training.SneakyObjectConstruction$X with modifiers "private"
java.lang.IllegalStateException: i is 1
ReflectionFactory: de.tutorials.training.SneakyObjectConstruction$X@459189e1
Unsafe: de.tutorials.training.SneakyObjectConstruction$X@2f9ee1ac
Heinz Kabutz: de.tutorials.training.SneakyObjectConstruction$Y@24c21495


Gruß Tom
 
"10, 20", da int ein atomarer Datentyp ist und byValue und nicht byReference der Funktion swap übergeben wird!
 
Zurück