У меня есть пара классов:
public class TextContent {
private String externalId;
}
public class ImageContent {
private String externalImageId;
}
public static void validateImageInput(List<ImageContent> imageAssets, String requestId) {
if(CollectionUtils.isEmpty(imageAssets)) {
throw some Error;
}
Set<String> uniqueIds = imageAssets.stream().map(ImageContent::externalImageId).collect(Collectors.toSet());
if(uniqueIds.size() != imageAssets().size()) {
throw some Error;
}
//Do some processing
}
public static void validateTextInput(List<TextContent> textAssets, String requestId) {
if(CollectionUtils.isEmpty(textAssets)) {
throw some Error;
}
Set<String> uniqueIds = textAssets.stream().map(ImageContent::externalId).collect(Collectors.toSet());
if(uniqueIds.size() != textAssets().size()) {
throw some Error;
}
//Do some processing
}
Как видите, часть проверки одинакова для обоих этих классов. И я хотел попробовать сделать это распространенным методом. Для этого:
public static void validateInput(List<?> assets, String requestId, Supplier<String> mapper) {
if(CollectionUtils.isEmpty(assets)) {
throw some error;
}
Set<String> uniqueIds = assets.stream().map(x -> mapper.get()).collect(Collectors.toSet());
if(uniqueIds.size() != assets().size()) {
throw some Error;
}
}
и затем вызовите его с помощью:
public static void validateAllInputs(List<ImageContent> imageAssets, List<TextContent> textAssets, String requestId) {
validateInput(imageAssets, requestId, ImageContent::externalImageId);
validateInput(textAssets, requestId, TextContent::externalId);
doSomeProcessingWithText(textAssets, requestId);
doSomeProcessingWithImage(imageAssets, requestId);
}
Но я получаю сообщение об ошибке Non static method cannot be referenced from static context.
Edit:
Другой вариант, который я пробовал, использовал Function
, то есть я передаю <TextContent, String> mapper
, а в своем потоке я использую .map(x -> mapper.apply(x)
. Однако, когда я пытаюсь передать его в функцию validateInputs(textAsset, requestId, TextContent::externalId)
, я получаю ту же ошибку Non static method cannot be referenced from static context.