Guten Tat,
Ich habe ein Problem und zwar soll ich eine Factory Methode erstellen,
allerdings komm ich einfach nicht drauf, eclipse gibt mir andauernd die
Meldung cannot instatiate the type
public class SortFactory {
public static ISort<Integer> create() {
ISort<Integer> fabric = new ISort<Integer>();
}
}
Jemand ne Idee wie ich das hinkriegen könnte? :/
MfG
public class SortFactory {
public static ISort<Integer> create() {
return new ISort<Integer>();
}
}
?
jo ist ein interface
import java.util.ArrayList;
public interface ISort<T extends Comparable<T>> {
public ArrayList<T> sort(ArrayList<T> items);
}
Wenn ISort ein INterface ist, dann kannst du kein Objekt davon erzeugen
http://www.java-tutorial.org/interface-als-datentyp.html
Ein Interface ist eine abstrakte Beschreibung dessen, was eine Klasse
die dieses Interface implementiert, alles kann.
Du musst in deiner Klasse alles implementieren, was die enthaltenen
Interfaces brauchen.
Das ist also hier aus ISort die sort()-Methode, sowie ggf. das, was
Comparable noch braucht (wird wohl compare() sein).
Ansonsten kann man bei deiner dürftigen Beschreibung nur raten, also
kommt dann natürlich der beliebte Rat "Hausaufgaben selber machen!"
Wie meinst du das wo das steht?
ich hab ja das Interface ISort, irgendwo muss ich die methode dann ja
implementieren, also hab ich ne Klasse Sort erstellt die ISort dann
implementiert
Wenn ich mal meine Glaskugel auspacke:
Du sollst eine Factory implementieren, die ein Sortierobjekt
zurückliefert.
Eine Factory benötigt man dann, wenn man abhängig von einem/mehreren
Parameter(n) unterschiedliche Implementierungen einer Sache erzeugen
will. In deinem Beispiel also z.B. ein BubbleSort, ein Quicksort, ein
InsertionSort, ein MergeSort, ....
Damit man diese Sorts universell verwenden kann haben alle die gleiche
Schnittstelle, nämlich das Interface "ISort"!
Du musst also folgendes implementieren:
Eine MergeSort Klasse die ISort implementiert.
Eine Factoryklasse, die eine (oft statische) Methode hat um abhängig von
irgendwelchen Kriterien deine gewünschte Sortierklasse erzeugt (Also in
Ermangelung weiterer Sortklassen eine MergeSort Klasse und zurückgibt,
und zwar als ISort Objekt.
Jetzt solltest du in der Lage sein dein Problem zu lösen, ansonsten kann
ich dir "Java ist auch eine Insel" empfehlen, gibts auch als Online
Buch.
Nachtrag: Ich würde die Klasse, die den Mergesort implementiert, auch so
nennen, und nicht "Sort". Präzise Namen sind das A und O, daß man seinen
Code nach einem Jahr noch selbst versteht, daß ihn andere verstehen, und
daß man ihn ohne größeres Refactoring erweitern kann und er trotzdem
verständlich bleibt.
(nur sicherheitshalber)
Geht es um eine "Hausaufgabe"
also ist das erstellen dieses "mergesort" objekte, die Aufgabe ?
wenn nein:
das gibt es doch sicher fix-fertig ?
ps.
return new ISort<Integer>();
wenn man das I weg lässt, musste es doch schon passen ??
Ja ist eine Hausaufgabe, die Methoden hab ich ja implementiert, nur kann
ich nicht testen obs richtig ist, da der JUnit test nur mit dieser
Fabrikmethode läuft und die krieg ich einfach nicht hin -.-
und nein
return new Sort<Integer>();
geht leider nicht, dann meckert eclipse: cannot instatiate the type
Sort<Integer>
^^
das wird wohl an den "Gernerics" liegen (da hab ich aber keine Ahnung
von, ...)
irgendwie wird es wohl in Richtung SortFactory<integer>
raus laufen müssen ??!?
ca.
Salome schrieb:> Wie meinst du das wo das steht?
Woher sollen wir das denn wissen?
Woher sollen wir wissen, was du alles geschrieben hast und was nicht?
Woher sollen wir wissen, wie diese Klasse aussieht?
Stell dir einfach vor, du hättest von deinem Problem noch nie etwas
gehört und weißt auch sonst nichts darüber. Lies dir deine
Beschreibungen durch. Könntest du damit irgendetwas anfangen?
Salome schrieb:> return new Sort<Integer>();> geht leider nicht, dann meckert eclipse
Programmieren durch raten oder was? Wie sieht den Sort aus?
Robert L. schrieb:> das gibt es doch sicher fix-fertig
Ja Collection API...
Wenn die Aufgabe lautet implementieren sie zuerst die Fabrikmethode,
damit die Junit tests laufen und man die Methoden erst danach erstellen
soll, damit mans testen kann, dann hab ich am anfang nur das Interface
und das gerüst der fabrikmethode
nur weil ich das nicht hinbekommen habe, hab ich zuerst die metthode
gemacht, mein mergesort, nur kann ich sie jetzt halt nicht testen,
deswegen spielts auch keine rolle, wie mein mergesort aussieht, weil die
fabrikmethode hätt ich ganz zu anfang erstellen sollen und brauch ich
nur für den junit test
@Before public void setup()
{
sort = SortFactory.create();
}
die ersten zeilen im test und hier stopps halt auch schon
ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen,
ist mir auch klar dass ihr keine hellseher seid, aber mehr konnt ich
nicht liefern, weil mehr wurd nicht vorgegeben.
danke an alle die helfen wollten
ich bin dann mal raus
>damit die Junit tests laufen und man die Methoden erst danach erstellen>soll,
aber die Sort klasse (mit ISort interface) (mit eben einer leeren
Methode) wirst brauchen
sonst kannst ja kein objekt instantiieren welches iSort implementiert
hat
aber nochmal: das problem liegt IMHO bei den Generics...
Salome schrieb:> ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen,
Das was du 'Zusammenhang' nennst, reicht aber nicht um dein wirkliches
Problem zu beheben.
Eine Analogie:
Natürlich kann man sagen, dass ein Nylonfaden gerissen ist und durch
eine andere Kordel ersetzt werden muss.
Solange man aber nicht weiß, dass du eine Lokomotive aufhängen willst,
wird das alles nichts nützen.
Das Problem ist nicht, dass der Nylonfaden einen Materialfehler hatte.
Das Problem ist die Lokomotive. Du redest hier aber immer nur vom
Nylonfaden. Ergo: keiner kann dir weiterhelfen und darüber beschwerst du
dich, anstatt das du einfach mal alle Karten auf den Tisch legst. Oder
denkst du dein Mergesort wäre so wahnsinnig hi-tech und wir hätten noch
nie einen gesehen?
Salome schrieb:> ich bin dann mal raus
Gut dann muss ich auch nichts mehr schreiben.
Ein offenes Posten von
1. Der Info daß es eine Hausaufgabe ist
2. Was konkret nicht funktioniert
3. Was du schon gemacht hast
4. Der Aufgabenstellung INCLUSIVE dem Testaufruf
hätte gereicht daß wir dir entsprechende Hinweise zum eigenen
Verständnis hätten geben können.
Aber immer wieder diese 'scheiß Salamitaktik'
Jo, sry dass ich anfänger bin und nicht gleich alles auf anhieb verstehe
und die zusammenhänge noch nicht immer gleich sofort sehe, hätte ich
gewusst woran es liegt hätte ich das interface und die methode gleich
mitgepostet, wollte aber unnötiges weglassen, das hat nix mit
salamitaktik zu tun, sondern damit, dass ich nicht unnötigerweise alles
posten wollte wegen einem kleinen fehler (in meinen augen, war ja
verkehrt, i am sry)...
das man sich deswegen gleich echauffieren muss, das hat mir grad die
lust geraubt, ich frag ned in nem forum um mich dann anmachen zu lassen
nur weil ich was falsch gemacht hab
Karl Heinz Buchegger schrieb:> Ergo: keiner kann dir weiterhelfen und darüber beschwerst du> dich, anstatt das du einfach mal alle Karten auf den Tisch legst. Oder> denkst du dein Mergesort wäre so wahnsinnig hi-tech und wir hätten noch> nie einen gesehen?
genau, deswegen hab ich hier gefrat, weil ich euch ja alle für unfähig
halte
ausserdem hab ich mich nirgends beschwert, dass man mir nicht hilf, der
grund weshalb mir die lust vergangen ist, ist dass man gleich angefahren
wird, weil man n fehler macht, deswegen hab ich geschrieben "ich bin
dann mal raus" und aus keinem andern grund. einige hinweise hab ich ja
durchaus bekommen und dafür hab ich mich auch bedankt
wünsch euch trotzdem noch n schönen tag
Robert L. schrieb:> aber nochmal: das problem liegt IMHO bei den Generics...
Warum? Wenn Sort nich generisch ist müßte er sich darüber beschweren
instantiieren kann man das immer es sei den das wäre auch ein Interface
oder eine abstrakte Klasse.
Salome schrieb:> das man sich deswegen gleich echauffieren muss, das hat mir grad die> lust geraubt, ich frag ned in nem forum um mich dann anmachen zu lassen> nur weil ich was falsch gemacht hab
Deswegen hat dich keiner angemacht.
Aber wenn du auch nach dem 3.ten zarten Hinweis, doch endlich mal den
kompletten Code zu zeigen, immer noch nicht kapierst, dann ist dir wohl
wirklich nicht zu helfen.
Du rufst ja auch nicht beim Arzt an und sagst: Es tut weh. Was kann mich
dagegen tun?