作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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/
我是一名优秀的程序员,十分优秀!