ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1021
1021
EMPFEHLEN
-
Hallo,
ich hoffe die untere Beschreibung ist verständlich.
Gibt ein eine Möglichkeit abzufragen wie der generische Typ einer geerbten Klasse ist?
Danke im Vorraus!
Genersiche Oberklasse:
Klasse die von Generisch erbtPHP-Code:public abstract class Generisch<T> {
private ArrayList<T> list = new ArrayList<T>();
public void addValue(T value)
{
this.list.add(value);
}
}
Was ich gerne machen möchte:PHP-Code:public class UnterGenerisch extends Generisch<Integer> {
}
PHP-Code:public static void main(String[] args) {
UnterGenerisch test = new UnterGenerisch();
test.getClass().istDasDerGenerischeTyp(Integer) //gibt true zurueck
-
02.10.09 08:58 #2
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
value.getClass();
Dadurch bekommst du der Datentyp der die Variable zur Laufzeit hat. Dann kann man mit der Methode isInstanceOf(Class) von Class erkennen, ob diese Klasse zur Laufzeit eine Instanz davon ist. Ein normales instanceOf hilft da nichts.
Was für Informationen brauchst du den genau? Um dein Problem vielleicht besser zu verstehen.Geändert von Anime-Otaku (02.10.09 um 12:34 Uhr)
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
Du kannst die Klasse einer Variable vom Type T nehmen.
Der Code ist nicht besonders schön, zeigt aber worauf ich hinaus will.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14
public abstract class Generisch<T> { private ArrayList<T> list = new ArrayList<T>(); private Class<?> valueClass; public void addValue(T value) { this.list.add(value); valueClass= value.getClass(); } public istDasDerGenerischeTyp(Class<?> testClass){ return valueClass.equals(testClass); } }
Code java:
Hab mal den folgenden Codeschnippel ausgetestet um zu sehen ob der Classenvergleich funktioniert - er funktioniert
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
private <T> Boolean isClassOf(T value, Class<?> testClass){ return value.getClass().equals(testClass); } public void test1(){ try { Integer value = 1; assertTrue(isClassOf(value, Integer.class)); } catch (Exception e) { fail(e.getMessage()); } } public void test2(){ try { Integer value = 1; assertTrue(! isClassOf(value, String.class)); } catch (Exception e) { fail(e.getMessage()); } }
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
-
03.10.09 12:56 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
schau mal hier:
http://www.tutorials.de/forum/java/3...ermitteln.html
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
package de.tutorials; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; public class GenericTypeDetection { public static void main(String[] args) { Sub sub = new Sub(); //Basis: System.out.println(((ParameterizedType) sub.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); //Beispiel Implementierung: System.out.println(isInstanceOf(sub, List.class, String.class)); System.out.println(isInstanceOf(sub, Base.class, String.class)); System.out.println(isInstanceOf(sub, Base.class, CharSequence.class)); System.out.println(isInstanceOf(sub, Base.class, Integer.class)); } static class Base<T> { } static class Sub extends Base<String> { } static boolean isInstanceOf(Object o, Class<?> clazz, Class<?>... typeArguments) { boolean result = clazz.isInstance(o); if (result && o != null) { Object genericSuperClass = o.getClass().getGenericSuperclass(); if (genericSuperClass instanceof ParameterizedType) { /* * flacher Vergleich... keine Unterstützung für GenericTypes á la List<Map<String,String>> */ ParameterizedType parameterizedType = (ParameterizedType) o.getClass().getGenericSuperclass(); Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); for (int i = 0; i < typeArguments.length; i++) { result &= actualTypeArguments[i].equals(typeArguments[i]) || typeArguments[i].isAssignableFrom((Class<?>)actualTypeArguments[i]); } } } return result; } }
Ausgabe:
Code :1 2 3 4 5
class java.lang.String false true true false
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Instanznamen in der Klasse abfragen
Von firestarterr im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 03.12.08, 10:29 -
$_GET in funktion einer klasse abfragen?
Von supersalzi im Forum PHPAntworten: 3Letzter Beitrag: 14.06.07, 13:31 -
Wert von einer Klasse abfragen
Von ksk im Forum Flash PlattformAntworten: 9Letzter Beitrag: 29.11.06, 12:36 -
Mit Jstl einen Boolean Wert aus Java klasse abfragen und zugreifen
Von NikDa im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 4Letzter Beitrag: 05.01.05, 10:13 -
MySQL-Klasse - verschachtelte Abfragen
Von pxlArtizzt im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 14.08.04, 23:36





Zitieren



Login





