Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
import Tools.IO.*;
import java.util.*;
import java.lang.*;
public class Jpp_a3 {
public int main ( ) {
List liste = new ArrayList();
liste.add( 4 );
return 0;
}
}
bringt mir den fehler:
Jpp_a3.java:13: cannot resolve symbol
symbol : method add (int)
location: interface java.util.List
liste.add( 4 );
^
1 error
es gibt keine add(int) Methode des Interfaces List.
Man kann IMHO nur Objekte adden.
Mit Reflections hab ich mich leider noch garnicht befasst, also kann ich da nicht allzuviel sagen.
fast alles...
int, byte, short,char, long sind primitive daten typen und somit keine objecte, aber bei long bin ich mir nicht sicher. float und double sind glaub ich schon objecte.
import Tools.IO.*;
import java.util.*;
import java.lang.*;
public class Jpp_a3 {
public int main ( ) {
List liste = new ArrayList();
Integer i = new Integer( 5 );
liste.add( i );
return 0;
}
}
danke an alle für diese erleuchtung am nachmittag!
jo so geht's. Wobei man das auch kürzer schreiben könnte:
Code:
liste.add(new Integer(5));
Hybridsprache...
Also wen du das so siehst sind nahezu alle programmiersprachen hybrid bis auf Python und ... da gab's doch nocheine, weil sie vollständig Objektorientiert designed sind. Nicht einmal C++ ist vollständig Objektorientiert. Aber ich bin der Meinung, dass das auch vorteile hat. z.B.: in Sachen Hardwarenahe programmierung
new Integer erzeugt nur ein Objekt, das ist schon richtig. valueOf erzeugt im Idealfall aber gar keins:
API hat gesagt.:
/**
Code:
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
Hab da noch eine Frage zu den Arraylisten. Wieso schreiben hier viele "Tippgeber" im Forum immer
Code:
List list = new ArrayList();
Ich hab das deswegen auch so gemacht. Jetzt bin ich aber graufgekommen, dass ich ja dann auf einige Methoden wie z.B. trimToSize() nicht verwenden kann.
Was hat es dann für einen Sinn, die Liste in der obigen Form zu erstellen und nicht gleich
Wo immer möglich über Interfaces arbeiten (nicht nur bei Listen) um deine Anwendung flexibel zu gestallten.
Wenn du irgendwann merkst das eine ArrayList nicht das richtige war weil du zB einen synchronisierten Vector oder eine eigene Liste brauchts,
musst du nur eine einzige Stelle im Programm ändern. Du kommst auch gar nicht in Versuchung Methoden wie getElementAt zu verwenden, was dir ebenfalls Probleme bei der Umstellung bereiten würde.
Interfaces erleichtern die Kapselung verschiedener Klassen enorm, so kann is dir zum beispiel egal sein ob die Methode getUsefullElemetsList der KlasseX eine ArrayList, einen Vector oder eine LinkedList verwendet, solange du weißt das du eine Liste bekommst.
Hoffe das hilft dir weiter...
wenn du mit List arbeitest, stellst du sicher, dass alle weiteren Schritte mit JEDER Implementierung von List funktionieren; du kannst ggf. dann später die Implementierung ( ..= new xyzList() einfacher auswechseln
so wird dein code "robuster" (in einem gewissen Sinn)
wenn (wie in deinem Fall) trotzdem einmal die Situation auftaucht, dass du eine ArrayList BRAUCHST, dann ist dieses Muster natürlich nicht angebracht, du kannst aber - wenn es nur um eine Luxusfunktion geht - einfach