dam*_*mon 0 java generics interface
我有一个名为BST的Java接口(二进制搜索树的简称),它具有泛型类型Key,Value,其中Key扩展为Comparable.我将其定义如下.
public interface BST<Key extends Comparable<Key>,Value> {
public void put(Key key,Value value);
public Value get(Key key);
public void delete(Key key);
public Iterable<Key> keys();
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义上面接口的实现.我试过这个
public class BSTImpl<Key extends Comparable<Key> ,Value> implements BST<Key extends Comparable<Key>,Value> {
...
}
Run Code Online (Sandbox Code Playgroud)
上面的定义在eclipse IDE中导致错误信息. extends后面的令牌implements BST<Key似乎是罪魁祸首
令牌"extends"的语法错误,预期
如果我从定义中省略"extends"标记(如下所示),则错误消失,我可以通过eclipse正确生成未实现的方法
public class BSTImpl<Key extends Comparable<Key> ,Value> implements BST<Key ,Value> {
@Override
public void put(Key key, Value value) {
// TODO Auto-generated method stub
}
@Override
public Value get(Key key) {
// TODO Auto-generated method stub
return null;
}
@Override
public void delete(Key key) {
// TODO Auto-generated method stub
}
@Override
public Iterable<Key> keys() {
// TODO Auto-generated method stub
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么扩展令牌首先会导致错误?有人可以解释一下吗?
因为
public class BSTImpl<Key extends Comparable<Key> ,Value> implements BST<Key extends Comparable<Key>,Value> {
^ type declaration ^ type argument
Run Code Online (Sandbox Code Playgroud)
在类声明中,泛型类型是一个类型声明,您可以稍后在类体中重用它.在您正在实现的接口中,它是一个类型参数参数.换句话说,您说我的类使用此类型实现此接口.你必须给它一个特定的类型.说Key extends Comparable...作为类型参数是没有意义的.
类型参数部分在类名后面,并由尖括号分隔.
如果TypeDeclSpecifier后跟任何类型参数,则它必须是TypeDeclSpecifier表示的类型声明的正确调用,并且所有类型参数都不是通配符类型参数,否则会发生编译时错误.
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |