Java 泛化 - 构造函数不能应用于给定类型
Java generalization - constructor cannot be applied to given types
我正在执行有关使用邻接列表实现图形的教程任务,但构造函数出现问题。
在给定的 GraphTester.java
我有:
//Constructor cannot be applied to given types
FriendShipGraph<String> graph = new AdjList<String>();
然后FriendShipGraph.java
提供接口:
public interface FriendshipGraph<T extends Object> {
public static final int disconnectedDist = -1;
public abstract void addVertex(T vertLabel);
public abstract void addVertex(T srcLabel, T tarLabel);
//Other abstract methods
}
所以我需要写一个class来实现一个LinkedList
:
public class SinglyLinkedList implements LinkedListInterface {
private Node head;
private int length;
public int getLength() {
return length;
}
public SinglyLinkedList() {
head = null;
length = 0;
}
//Other methods to manage the linked list
public class Node
{
private String value;
private Node nextNode;
public Node(String value) {
this.value = value;
nextNode = null;
}
//Other methods to manage node
}
}
而且我必须使用 LinkedList
的数组来实现 Graph
:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
然而,当我编写自己的测试文件时,我会像这样创建 AdjList 对象而不会出错,但这不是 class 所要求的:
AdjList<String> aList = new AdjList<String>("9");
所以任何人都请建议我如何修复构造函数。非常感谢!
FriendShipGraph<String> graph = new AdjList<String>();
您在 AdjJust
中没有零参数构造函数。如果您提供自己的构造函数,则不会生成默认的零参数构造函数,就像您对 AdjList(T vertices)
.
所做的那样
您需要提供默认构造函数。根据未显示的其他代码,类似以下内容可能就足够了:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
public AdjList() {
}
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
我不太确定你为什么要传递一个字符串来表示一个数量,但这至少应该可以解决你所询问的编译错误。
除了Trey的正确答案外,还有一些评论:
你的单参数构造函数说 T vertices
;但是你正在那里做一个 "hard" 转换为 (String) 。如果 T 不是字符串,则该代码将抛出异常。
所以,您应该让 AdjList(顺便说一句,这个名字很糟糕)像 class AdjList implements FriendshipGraph<String>
;或者当你不想 "fix" 通用类型为字符串时,你可以选择 qty = Integer.parseInt(verties.toString())
但是看看那个 - 听起来是不是很奇怪?你知道吗,把一些看起来像数字的东西变成一个字符串,然后从中解析出一个数字?也许它应该一直是一个整数?
然后:着手命名。绝对没有必要使用像"qty"这样的缩写;为什么不将其命名为 numberOfLists 或类似的名称?!
我正在执行有关使用邻接列表实现图形的教程任务,但构造函数出现问题。
在给定的 GraphTester.java
我有:
//Constructor cannot be applied to given types
FriendShipGraph<String> graph = new AdjList<String>();
然后FriendShipGraph.java
提供接口:
public interface FriendshipGraph<T extends Object> {
public static final int disconnectedDist = -1;
public abstract void addVertex(T vertLabel);
public abstract void addVertex(T srcLabel, T tarLabel);
//Other abstract methods
}
所以我需要写一个class来实现一个LinkedList
:
public class SinglyLinkedList implements LinkedListInterface {
private Node head;
private int length;
public int getLength() {
return length;
}
public SinglyLinkedList() {
head = null;
length = 0;
}
//Other methods to manage the linked list
public class Node
{
private String value;
private Node nextNode;
public Node(String value) {
this.value = value;
nextNode = null;
}
//Other methods to manage node
}
}
而且我必须使用 LinkedList
的数组来实现 Graph
:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
然而,当我编写自己的测试文件时,我会像这样创建 AdjList 对象而不会出错,但这不是 class 所要求的:
AdjList<String> aList = new AdjList<String>("9");
所以任何人都请建议我如何修复构造函数。非常感谢!
FriendShipGraph<String> graph = new AdjList<String>();
您在 AdjJust
中没有零参数构造函数。如果您提供自己的构造函数,则不会生成默认的零参数构造函数,就像您对 AdjList(T vertices)
.
您需要提供默认构造函数。根据未显示的其他代码,类似以下内容可能就足够了:
public class AdjList <T extends Object> implements FriendshipGraph<T> {
SinglyLinkedList[] AdjList = null;
public AdjList() {
}
//This is the constructor containing the error
public AdjList(T vertices) {
int qty = Integer.parseInt((String) vertices);
AdjList = new SinglyLinkedList[qty];
for (int i = 0; i < AdjList.length; i++)
AdjList[i] = new SinglyLinkedList();
}
}
我不太确定你为什么要传递一个字符串来表示一个数量,但这至少应该可以解决你所询问的编译错误。
除了Trey的正确答案外,还有一些评论:
你的单参数构造函数说 T vertices
;但是你正在那里做一个 "hard" 转换为 (String) 。如果 T 不是字符串,则该代码将抛出异常。
所以,您应该让 AdjList(顺便说一句,这个名字很糟糕)像 class AdjList implements FriendshipGraph<String>
;或者当你不想 "fix" 通用类型为字符串时,你可以选择 qty = Integer.parseInt(verties.toString())
但是看看那个 - 听起来是不是很奇怪?你知道吗,把一些看起来像数字的东西变成一个字符串,然后从中解析出一个数字?也许它应该一直是一个整数?
然后:着手命名。绝对没有必要使用像"qty"这样的缩写;为什么不将其命名为 numberOfLists 或类似的名称?!