2016-06-11 1 views
0

나는 여기에서 이미 답을 얻었습니다. 그러나 모든 대답이 여전히 내 문제를 해결할 수는 없습니다. 문제는 이것이다 :클래스의 생성자가 주어진 유형에 적용될 수 없습니다 - Abstract 클래스

이 같은 생성자를 포함하는 노드입니다 추상 클래스가 있습니다

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

그리고, 내가 (슈퍼 사용)이 같은 생성자를 포함,의 TreeNode에 absract 클래스를 확장을 :

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; 
} 

그래서,의 TreeNode 클래스는 추상적 인 노드 클래스와 노드 클래스의 데이터 세트 및 labelindex를 호출하는 슈퍼 방법을 사용하여 확장하지만, 클래스 노드에서 나는 경고 얻을 "생성자 노드가 주어진 유형에 적용 할 수 없습니다, 인수를 할 필요가 없습니다 . " 아마도 TreeNode에 몇 가지 매개 변수를 추가했기 때문에 가능할 것이라고 생각합니다. 어떤 도움을 주셔서 감사합니다.

+0

명확하게 (또는 더 나은 코드를 보여)하십시오. – Argb32

+0

나는 당신이 추상적 인 클래스를 인스턴스화 할 수 없기 때문에 그것이 생각할지도 모른다. 그래서 당신의 생성자를 무시한다. 그냥 Object의 디폴트 클래스를 사용한다. 그냥 아이디어 – RobotKarel314

+0

그것은 이미 사람들을 움직이게했다, 나는 Netbeans를 다시 시작할 필요가있다 ... Thx –

답변

2

자세한 내용을 보지 않고도 문제가 무엇인지 알기가 어렵습니다. 아니요, 추상 클래스를 직접 인스턴스화 할 수는 없지만 하위 클래스에서 추상 클래스의 생성자에 대해 super를 호출 할 수 있습니다. 따라서 수행중인 작업이 정상적으로 처리됩니다. 한 가지 아이디어는 Node 또는 TreeNode라는 다른 클래스와 충돌하는 클래스 경로 문제가 없는지 확인하는 것입니다. 사실, 당신은 당신이 수입 한 경우 이미 예를 들어, 클래스 경로에있을 수있는 사용자 정의 클래스를 만드는 : 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

이 MyTreeNode 및 MYNODE이든 같은 당신을 위해 더 구체적인 뭔가에 이름을 변경하십시오.

어떤 경우이든, 전송 한 코드로 최선을 다해 복제 할 수 있었고 제 마지막에 문제가 표시되지 않았습니다 (즉, 내 클래스 경로에 다른 가져 오기와 충돌하지 않음). 이것을 확인하고 당신이 가지고있는 것과 일치하는지 확인하십시오. 그렇지 않으면 모든 코드와 함께 오류의 스택 추적을 복사/붙여 넣기하십시오. 감사합니다

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 {} 
관련 문제