正如@SimonAndréForsberg所讨论的那样,编程太过防守往往是不必要的浪费时间,我们应该相信我们自己的声明.
但是,为了获得乐趣,这里是一个解决方案,可以在编译时强制执行所有在类/接口声明上的限制.
声明
视图界面:
public interface View> {}
>这里,我们只想确保type参数是可视的.
>第二个类型的参数不需要限制,因为Viewable的声明将不允许可视的< T,?>如果存在?本身不是View< T>.
可视界面:
public interface Viewable,V extends View> {
public void addViewCallback(final V view);
public void removeViewCallback(final V view);
}
>这里,T需要被声明为可见,因为我们将其用作View< T>的类型参数.在行尾.
>与以前一样,不需要限制?因为我们说之后,第二个类型的参数需要是一个View< T>如果第一类参数是T.
public class Hand implements Viewable {
@Override
public void addViewCallback(HandView view) {}
@Override
public void removeViewCallback(HandView view) {}
}
public interface HandView extends View {
}