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
ach ja, und ISort klingt wie ein Interface - wie heisst denn die Implementierung?
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.
Theoretisch müsst ich dann ja aber eine Instanz von Sort machen können, oder? die implementiert ja dann das Interface, aber auch das klappt nicht
Geht nicht ist natürlich auch eine gute Fehlerbeschreibung. Du mußt in der Faktory einfach ein Objekt erzeugen, welches ISort implementiert.
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
Salome schrieb: > ausserdem hast du meine Frage komplett aus dem zusammenhang gerissen, Welchen Zusammenhang? Den suche ich hier noch.
>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.
1 | public class DummySort<T extends Comparable<T>> implements ISort<T>{ |
2 | |
3 | public ArrayList<T> sort(ArrayList<T> items) { |
4 | return new ArrayList<T>(); |
5 | }
|
6 | }
|
so könnte z.B. eine erste Dummy Implementierung aussehen.
Udo Schmitt schrieb: > Aber immer wieder diese 'scheiß Salamitaktik' In diesem Fall wohl eher "Salometaktik" SCNR
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.