Чтобы воспользоваться лямбда-выражениями (или ссылками на методы), вы должны попытаться выяснить, как разница между этими двумя методами может быть выражена с помощью функционального интерфейса (т. Е. Интерфейса, имеющего один метод).
Оба ваших метода получают возвращаемое значение из экземпляра IFrontControllerRemote
.Следовательно, универсальный метод может принять Function<IFrontControllerRemote,T>
, где T
представляет возвращаемое значение.Экземпляр Function<IFrontControllerRemote,T>
примет IFrontControllerRemote
и вернет требуемое значение.
public <T> T getProperty(Function<IFrontControllerRemote,T> retriever) {
Properties props = new Properties();
props.put("java.naming.factory.url.pkgs","org.jboss.ejb.client.naming");
try {
InitialContext ctx = new InitialContext(props);
String ejbUrl = "ejb:ShopManagmentEAR/ShopManagmentEJB//FrontController!"+IFrontControllerRemote.class.getName();
IFrontControllerRemote bean = (IFrontControllerRemote) ctx.lookup(ejbUrl);
return retriever.apply(bean);
} catch (NamingException e) {
System.out.println("error");
e.printStackTrace();
}
return null;
}
Теперь для вызова метода:
UserDto user = getProperty (b -> b.findByUsernameAndPassword(username, password));
List<CategoryDto> list = getProperty (IFrontControllerRemote::getAllCategories);