gpt4 book ai didi

java - 编写指向其实现者的通用接口(interface)的便捷方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:14 29 4
gpt4 key购买 nike

java中有没有一种方法可以编写通用接口(interface),以更方便的方式指出此类接口(interface)的实现者?

例如我写的接口(interface):

public interface Updatable<T> {
void updateData(T t);
}

我想指出的是,在 updateData(T t) 方法中只能传递 implementor 的实例。

所以,我必须写这样的东西:

public class Office implements Updatable<Office> {

@Override
public void updateData(Office office) {
//To change body of implemented methods use File | Settings | File Templates.
}
...
...
...
}

不过好像有点丑。你有更好的变体吗?

最佳答案

人们一直在要求“This”类型,主要是为了流畅的 API。它可能永远不会成功。但我认为只要建立一个约定就可以了——将类型变量命名为 This表示 this 的类型.所以读者看到This并确切地知道它应该是什么;不太可能被滥用

public interface Updatable<This> {
void updateData(This t);
}

// any Foo implementing Updatable must supply This=Foo

public class Office implements Updatable<Office>

This必须是 Updatable<This> 的子类型, 人们经常表达这种约束

public interface Updatable<This extends Updatable<This>> 

我认为没有必要,也不应该这样做。 This 的命名约定足够好了。

该约束也不够严格,无法防止滥用。例如

public interface Foo<T extends Foo<T>>

public class Foo1 implements Foo<Foo1> // good, intended use

public class Foo2 implements Foo<Foo1> // compiles! but not intended

关于java - 编写指向其实现者的通用接口(interface)的便捷方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022443/

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