如何删除Fluent界面默认方法的未经检查的警告

时间:2019-06-26 12:44:57

标签: java fluent

我在想,是否有一种方法可以消除以下代码的未经检查的警告,该代码提供了返回自己的流畅API。

public interface Taggable<T> {

    /**
     * Should return the underlying set that holds the tags.
     *
     * @return set
     */
    Set<String> getTags();

    @SuppressWarnings("unchecked")
    default T tag(@NotNull String... tags) {
        for (String tag : tags) {
            getTags().add(tag);
        }
        return (T) this;
    }

    @SuppressWarnings("unchecked")
    default T untag(@NotNull String tag) {
        getTags().remove(tag);
        return (T) this;
    }

}

用法将是

@Data
public class MyObject implements Taggable<MyObject> {
   private Set<String> tags;
}

MyObject t = new MyObject()
   .tag("abc")
   .tag("def");

带有禁止警告https://repl.it/@trajano/fluent

的工作示例

1 个答案:

答案 0 :(得分:1)

public interface Taggable<T extends Taggable<T>>

然后改变

(T) this

this

所以:

default Taggable<T> tag(@NotNull String... tags) {
    Collections.addAll(getTags(), tags);
    return this;
}

这是基类Enum(对于所有枚举类)的作用。

一个流畅的API,即构建器模式,通常较为冗长。 但是,优点是没有getTags这样的伪像。 委派给标签/未标签接口实现似乎更好。