Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不能用不同的参数继承_Java - Fatal编程技术网

Java不能用不同的参数继承

Java不能用不同的参数继承,java,Java,我在实际继承接口时遇到问题。我总是以错误告终 错误:无法使用不同的参数继承NameableContainer:和 我有以下接口: public interface Nameable public interface Name public interface Friend extends Nameable public interface NameableContainer<T extends Nameable> { void add(Name name, Name p

我在实际继承接口时遇到问题。我总是以错误告终

错误:无法使用不同的参数继承NameableContainer:

我有以下接口:

public interface Nameable

public interface Name

public interface Friend extends Nameable

public interface NameableContainer<T extends Nameable> {
    void add(Name name, Name prevName);

    void remove(Nameable nameable);

    T findByName(Name name);
}

public interface FriendContainer extends NameableContainer<Friend>
最后,试着把这些放在一起

public class Friends extends NameableMap implements FriendContainer

我遗漏了什么?

当你说

public abstract class NameableMap implements NameableContainer
这就把编译器中的所有东西都扔掉了;原始类型是错误的,除非您的代码最初是为Java1.4或更早版本编写的。当实现指定类型参数的接口时,需要提供具体类型,或者如果还不知道具体类型,可以引入另一个类型参数并将其传递给超类型

请参阅:

因此,在实现
namablecontainer
时指定一个变量泛型类型参数(因为您还不知道具体的类型,因为
namablemap
也应该适用于所有namables)

public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>
//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^
公共抽象类namablemap实现namablecontainer
//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^

当您说

public abstract class NameableMap implements NameableContainer
这会使编译器中的所有内容都失效;原始类型是错误的,除非您的代码最初是为java 1.4或更早版本编写的。当您实现指定类型参数的接口时,您需要提供具体类型,或者如果还不知道具体类型,您可以引入另一个类型参数并将其传递给超类型

请参阅:

因此,在实现
namablecontainer
时指定一个变量泛型类型参数(因为您还不知道具体的类型,因为
namablemap
也应该适用于所有namables)

public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>
//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^
公共抽象类namablemap实现namablecontainer
//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^

将整个程序中的所有代码移到一个类中,并将其放在一行上

将整个程序中的所有代码移到一个类中,并将其放在一行上

如果要实现
命名容器
,则需要提供一个实现
命名
的类型参数。当前您没有这样做。如果重新实现
namablecontainer
,您需要提供一个实现
namablecontainer
的类型参数。目前您没有这样做。在这种情况下,使用原始类型确实会产生错误。不过,您仍然可以在其他代码中使用原始类型。不建议这样做。您可以使用原始类型,但它将始终引发编译器错误ff.非常不幸的是,在javac中,默认情况下这仍然不是一个错误,因为这是代码中许多难以跟踪的问题的原因。我已经添加了一个链接到关于这一点的深入问答。是的,他们允许原始类型的主要原因是因为兼容性。现在大多数代码都会转换为泛型,但我确信确实有直到生产中使用原始类型的代码。抱歉,我没有包含所有代码,这是我的错误。使用对NameableMap的更改编译时产生错误:NameableMap中的findByName(Name)无法实现findByName(Name)在NameableContainer中,返回类型Nameable与T#2不兼容,其中T#1,T#2是类型变量:T#1扩展了接口NameableContainer中声明的Nameable,T#2扩展了类NameableMap中声明的Nameable,但没有看到您的代码,我无法判断问题。也许您忘记了
中的
实现了NameableContainer
。或者您在
NameableMap
中的方法
findByName
上引入了另一个方法局部类型变量。在这种情况下,使用原始类型确实会产生错误。不过,您仍然可以在其他代码中使用原始类型。这是不鼓励的。您可以使用原始类型,但它总是会使编译器失效。这真的很不幸在javac中,默认情况下这仍然不是一个错误,因为这是代码中许多难以跟踪的问题的原因。我已经添加了一个链接,指向关于这一点的深入问答。是的,他们允许原始类型的主要原因是兼容性。到目前为止,大多数代码都会转换为泛型,但我确信在生产中仍然有代码t使用原始类型。抱歉,我没有包含所有代码,这是我的错误。使用对NameableMap的更改进行编译会产生错误:NameableMap中的findByName(Name)无法实现findByName(Name)在NameableContainer中,返回类型Nameable与T#2不兼容,其中T#1,T#2是类型变量:T#1扩展了接口NameableContainer中声明的Nameable,T#2扩展了类NameableMap中声明的Nameable,但没有看到您的代码,我无法判断问题。也许您忘记了
中的
实现了NameableContainer
。或者您在
namablemap
中的方法
findByName
上引入了另一个方法局部类型变量。