如何生成我的界面
How to generify my interface
我有以下界面:
public interface ProvidersFilter {
void setQuery(@NonNull Object query);
Object apply();
}
以及以下实施 类:
第一次实施:
public class ProvidersRemoteFilter implements ProvidersFilter {
private Query mQuery;
@Override
public void setQuery(@NonNull Object query) {
if (query instanceof Query) {
mQuery = (Query) query;
} else {
throw new RuntimeException("query object must be of type com.google.firebase.firestore.Query");
}
}
@Override
public Object apply() {
return mQuery;
}
}
第二次实施:
public class ProvidersLocalFilter implements ProvidersFilter {
private String mQuery;
@Override
public void setQuery(@NonNull Object query) {
if (query instanceof String) {
mQuery = (String) query;
} else {
throw new RuntimeException("query object must be of type String");
}
}
@Override
public Object apply() {
return mQuery;
}
}
我想通过生成我的接口并实现 类 来避免使用 instanceof
。
您需要向界面添加类型变量。
接口:
public interface ProvidersFilter<T> {
void setQuery(@NonNull T query);
T apply();
}
实施class:
public class ProvidersRemoteFilter implements ProvidersFilter<Query> {
private Query mQuery;
@Override
public void setQuery(@NonNull Query query) {
mQuery = query;
}
@Override
public Query apply() {
return mQuery;
}
}
由于本地和远程提供程序具有相同的代码,您可以使用抽象 class 来实现共同点。在这种情况下,不需要界面,但您可以保持不变:
public interface ProvidersFilter<Q> {
void setQuery(@NonNull Q query);
Q apply();
}
abstract class AbstractProvidersFilter<Q> {
private Q mQuery;
@Override
public void setQuery(@NonNull Q query) {
mQuery = query;
}
@Override
public Q apply() {
return mQuery;
}
}
public class ProvidersRemoteFilter extends AbstractProvidersFilter<Query> {}
public class ProvidersLocalFilter extends AbstractProvidersFilter<String> {}
我有以下界面:
public interface ProvidersFilter {
void setQuery(@NonNull Object query);
Object apply();
}
以及以下实施 类:
第一次实施:
public class ProvidersRemoteFilter implements ProvidersFilter {
private Query mQuery;
@Override
public void setQuery(@NonNull Object query) {
if (query instanceof Query) {
mQuery = (Query) query;
} else {
throw new RuntimeException("query object must be of type com.google.firebase.firestore.Query");
}
}
@Override
public Object apply() {
return mQuery;
}
}
第二次实施:
public class ProvidersLocalFilter implements ProvidersFilter {
private String mQuery;
@Override
public void setQuery(@NonNull Object query) {
if (query instanceof String) {
mQuery = (String) query;
} else {
throw new RuntimeException("query object must be of type String");
}
}
@Override
public Object apply() {
return mQuery;
}
}
我想通过生成我的接口并实现 类 来避免使用 instanceof
。
您需要向界面添加类型变量。
接口:
public interface ProvidersFilter<T> {
void setQuery(@NonNull T query);
T apply();
}
实施class:
public class ProvidersRemoteFilter implements ProvidersFilter<Query> {
private Query mQuery;
@Override
public void setQuery(@NonNull Query query) {
mQuery = query;
}
@Override
public Query apply() {
return mQuery;
}
}
由于本地和远程提供程序具有相同的代码,您可以使用抽象 class 来实现共同点。在这种情况下,不需要界面,但您可以保持不变:
public interface ProvidersFilter<Q> {
void setQuery(@NonNull Q query);
Q apply();
}
abstract class AbstractProvidersFilter<Q> {
private Q mQuery;
@Override
public void setQuery(@NonNull Q query) {
mQuery = query;
}
@Override
public Q apply() {
return mQuery;
}
}
public class ProvidersRemoteFilter extends AbstractProvidersFilter<Query> {}
public class ProvidersLocalFilter extends AbstractProvidersFilter<String> {}