java中是否有一种编写通用接口的方法,以更方便的方式指出这种接口的实现者?
例如我写的界面:
public interface Updatable<T> {
void updateData(T t);
}
Run Code Online (Sandbox Code Playgroud)
我想指出只有实现者的实例可以在updateData(T t)方法中传递.
所以,我必须写这样的东西:
public class Office implements Updatable<Office> {
@Override
public void updateData(Office office) {
//To change body of implemented methods use File | Settings | File Templates.
}
...
...
...
}
Run Code Online (Sandbox Code Playgroud)
但似乎有点难看.你有更好的变种吗?
人们一直在寻求“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>
Run Code Online (Sandbox Code Playgroud)
由于This必须 是 的子类型Updatable<This>,人们经常表达这种约束
public interface Updatable<This extends Updatable<This>>
Run Code Online (Sandbox Code Playgroud)
我认为没有必要,也不应该这样做。的命名约定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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |