Forums Neueste Beiträge
 

Member type over type variable

28/06/2015 - 22:17 von Heiner Kücker | Report spam
Hallo,

ich befasse mich immer noch mit Java8.

Erstaunlicherweise ist es möglich,
in einem Typen oder für Feld-/Methoden-Zugriff
eine geschachtelte/innere Klasse
anhand einer Typ-Variablen zu notieren:

package de.heinerkuecker.parser.java8.test.class_.nested.play;

/**
* Interface with nested interface.
*/
public interface IfWithNestedIf_0
{
public interface NestedIf
{
}

/**
* TODO macht der static-Modifier hier einen Unterschied?
*/
public static interface NestedStaticIf
{
}

public class InnerClass
{
}

public static class NestedClass
{
}

}

/**
* Use member type of {@link IfWithNestedIf_0} over type variable.
*
* @param <T> {@link IfWithNestedIf_0}
*/
class IfWithNestedIf_0_Use<T extends IfWithNestedIf_0>
{
/**
* Field with member type of {@link IfWithNestedIf_0}.
*/
T.NestedIf field1 = null;

/**
* Field with static member type of {@link IfWithNestedIf_0}.
*/
T.NestedStaticIf field2 = null;

void m(
IfWithNestedIf_0 outer )
{
// dies geht nicht bei Interface, aber bei Klasse, siehe ClassWithNestedIf_0: IfWithNestedIf_0.InnerClass inner = outer.new InnerClass();
}
}

Ziemlich abgefahren!

Leider steht in der JLS gar nichts darüber:

https://docs.oracle.com/javase/spec...ml#jls-6.5

https://docs.oracle.com/javase/spec...#jls-6.5.5

Habe ich die richtige Stelle in der JLS nicht gefunden?

Zweite Frage:

Macht es einen Unterschied,
wenn das innere/geschachtelte
Interface static ist?

Bei Klassen macht der
static-Modifier folgenden
Unterscheid aus:

non-static: inner class

static: embedded class
(nur im Namensraum der enclosing class
enthalten, hat sonst nichts mit der
enclosing class zu tun

Danke
Heiner
www.heinerkuecker.de
 

Lesen sie die antworten

#1 Patrick Roemer
30/06/2015 - 12:32 | Warnen spam
Responding to Heiner Kücker:
Erstaunlicherweise ist es möglich,
in einem Typen oder für Feld-/Methoden-Zugriff
eine geschachtelte/innere Klasse
anhand einer Typ-Variablen zu notieren:


[...]
Leider steht in der JLS gar nichts darüber:
https://docs.oracle.com/javase/spec...ml#jls-6.5



Ohne mich da jetzt wirklich reinzulesen: Typparameter werden doch
explizit aufgelistet (§6, §6.1, §6.3), und da sie Typen repraesentieren
(§4.4), sollten sie verwendbar sein, wo in §6.5 von Typen die Rede ist...?

Macht es einen Unterschied,
wenn das innere/geschachtelte
Interface static ist?



Member interfaces sind immer static. (§8.5.1)

Viele Gruesse,
Patrick

Ähnliche fragen