2016-06-11 6 views
0

Ich kenne Titular Probleme wurde hier und dort schon beantwortet, aber für jede Antwort kann immer noch nicht mein Problem lösen. Das Problem ist folgendes:Konstruktor in der Klasse kann nicht auf bestimmte Typen angewendet werden - Abstract Class

I abstrakte Klasse haben, die Knoten ist, enthält Konstruktor wie folgt aus:

public Node(List<Record> dataSet, int labelIndex) { 
    this.allSamples = new ArrayList<Integer>(); 
    this.dataSet = dataSet; 
    this.classificationLabelIndex = labelIndex; 
    this.entropy = 0; 
} 

Und dann, ich verlängern die absract Klasse in TreeNode, mit Konstruktor wie diese (Super verwenden):

public TreeNode(List<Record> dataSet, int labelIndex, List<Attribute> attributes, int level, double threshhold) { 
    super(dataSet, labelIndex); 
    this.attributes = attributes; 
    splittedAttrs = new HashSet<Integer>(); 
    this.level = level; 
    this.displayPrefix = ""; 
    this.children = null; 
    this.threshhold = threshhold; 
} 

Also, die TreeNode Klasse abstrakt Node-Klasse erweitert und Super-Methode unter Verwendung von Daten-Set und labelindex von Node-Klasse zu nennen, aber dann kann ich mich warnen „Konstruktor Knoten in der Klasse Knoten nicht auf bestimmte Arten angewendet werden, benötigt keine Argumente . " Vielleicht, weil ich einige Parameter in TreeNode hinzugefügt habe, aber ich denke immer noch, dass es sehr unwahrscheinlich ist. Jede Hilfe wird geschätzt.

+0

Bitte klären (oder besser zeigen den Code), wenn Sie die Warnung bekommen. – Argb32

+0

Ich denke, es könnte sein, weil Sie eine abstrakte Klasse nicht instanziieren können, also ignoriert es Ihren Konstruktor, indem Sie nur den Standard-Objekt von Object verwenden. Nur eine Idee – RobotKarel314

+0

Es funktionierte schon Jungs, ich muss nur Netbeans neu starten ... Thx –

Antwort

2

Ohne weitere Details zu sehen, ist es schwer zu wissen, was das Problem ist. Nein, Sie können eine abstrakte Klasse nicht direkt instantiieren, aber ja, Sie können super den Konstruktor einer abstrakten Klasse aus einer Unterklasse aufrufen, also scheint es, was Sie tun. Eine Idee besteht darin, sicherzustellen, dass Sie keine Klassenprobleme mit einer anderen Klasse namens Node oder TreeNode haben. Eigentlich sind Sie benutzerdefinierte Klassen erstellen, die bereits in Ihrem Classpath existieren könnte, wenn Sie diese importiert haben, zum Beispiel: https://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeNode.html https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html

Versuchen Sie, sie auf etwas speziellere für Sie wie MyTreeNode und MyNode oder was auch immer die Umbenennung.

Wie auch immer, ich habe versucht, so gut wie möglich mit dem von Ihnen gesendeten Code zu replizieren und sah keine Probleme an meinem Ende (d. H. Keine Konflikte mit anderen Importen in meinem Klassenpfad). Überprüfen Sie dies und sehen Sie, ob es zu dem passt, was Sie haben. Wenn nicht, bitte kopieren Sie den Stack-Trace Ihres Fehlers zusammen mit dem gesamten Code.

Dank
import java.util.ArrayList; 
import java.util.List; 

import java.util.ArrayList; 
import java.util.List; 

public abstract class Node { 

private List<Integer> allSamples; 
private List<Record> dataSet; 
private int classificationLabelIndex; 
private int entropy; 

public Node(List<Record> dataSet, int labelIndex) { 
    this.allSamples = new ArrayList<Integer>(); 
    this.dataSet = dataSet; 
    this.classificationLabelIndex = labelIndex; 
    this.entropy = 0; 
} 

}

import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

public class TreeNode extends Node { 

private List<Attribute> attributes; 
private Set<Integer> splittedAttrs; 
private int level; 
private String displayPrefix; 
private Object children; 
private double threshhold; 

public TreeNode(List<Record> dataSet, int labelIndex, 
     List<Attribute> attributes, int level, double threshhold) { 
    super(dataSet, labelIndex); 
    this.attributes = attributes; 
    splittedAttrs = new HashSet<Integer>(); 
    this.level = level; 
    this.displayPrefix = ""; 
    this.children = null; 
    this.threshhold = threshhold; 
} 

public static void main(String[] args) { 
    Node node = new TreeNode(new ArrayList<Record>(), 1, 
      new ArrayList<Attribute>(), 1, 1.1); 

} 

}

class Record {} 
class Attribute {} 
Verwandte Themen