> {...}"的含义-6ren"> > {...}"的含义-我刚刚遇到了一段代码,它的作用是: public interface MyInterface> {...} 然后类似乎可以: public final class MyClass implements-6ren">
gpt4 book ai didi

java - "public interface MyInterface> {...}"的含义

转载 作者:行者123 更新时间:2023-11-30 06:09:07 25 4
gpt4 key购买 nike

我刚刚遇到了一段代码,它的作用是:

public interface MyInterface<T extends MyInterface<T>> {...}

然后类似乎可以:

public final class MyClass implements MyInterface<MyClass> {...}

接口(interface)没有定义,只有方法声明。我认为extends MyInterface<T>是多余的,接口(interface)可以只是:

public interface MyInterface<T> {...}

作为 Java 新手,原始接口(interface)定义(带有扩展部分)有什么用途吗?这是一种模式吗?

最佳答案

The interface has no definitions, only method declarations. I think extends MyInterface is redundant...

不,不是。该绑定(bind)确保只接受也实现该接口(interface)的类。我们来看一个界面:

SomeInterface.java

public interface SomeInterface<T extends SomeInterface<T>>
{
public T getInterfaceImpl();

public void setTitle(String text);
}

和两个不同的实现类:

SomeInterfaceImpl.java:

public class SomeInterfaceImpl implements SomeInterface<SomeInterfaceImpl>
{
private String title;

@Override
public SomeInterfaceImpl getInterfaceImpl()
{
return new SomeInterfaceImpl();
}

@Override
public void setTitle( String text )
{
this.title = text;
}
}

AnotherSomeInterfaceImpl.java:

public class AnotherSomeInterfaceImpl implements SomeInterface<SomeInterfaceImpl>
{
private String title;

@Override
public SomeInterfaceImpl getInterfaceImpl()
{
return new SomeInterfaceImpl();
}

@Override
public void setTitle( String text )
{
this.title = text;
}
}

仔细查看两个实现中的方法签名。这两个类使用相同的类型参数扩展相同的接口(interface),该类型参数以相同的方式定义方法的签名。想象一下省略接口(interface)声明中的界限。突然间,一个实现类可能看起来像这样:

public class AnotherSomeInterfaceImpl implements SomeInterface<String>
{

private String title;

@Override
public String getInterfaceImpl()
{
return "Hello World";
}

@Override
public void setTitle( String text )
{
this.title = text;
}
}

现在我们不再确信 public T getInterfaceImpl() 返回的对象是 SomeInterface 的实现,或者它具有 public void 等方法setTitle(字符串文本)

关于java - "public interface MyInterface<T extends MyInterface<T>> {...}"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50641599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com