在Vaadin 8.5.1中,我们有一个Grid组件,它使用这种方法向网格中添加新列。
<V> Grid.âColumn<âTâ,V> addColumn(âValueProvider<âTâ,V> valueProvider)
完整的示例如下:
// Have some data
List<Person> people = Arrays.asList(
new Person("Nicolaus Copernicus", 1543),
new Person("Galileo Galilei", 1564),
new Person("Johannes Kepler", 1571));
// Create a grid bound to the list
Grid<Person> grid = new Grid<>();
grid.setItems(people);
grid.addColumn(Person::getName).setCaption("Name");
grid.addColumn(Person::getBirthYear).setCaption("Year of birth");
layout.addComponent(grid);
这个很好用。
但我现在要实现的是,当Person类扩展了大多数对象通用的另一个类时。
public class NamedClass
{
...
public String getName()
{
return name;
}
}
public class Person extends NamedClass
{
...
public int getBirthYear()
{
return birthYear;
}
}
现在我想创建一个网格助手类,它可以
grid.addColumn(NamedClass::getName).setCaption("Name");
对于所有的子类,所有其他属性都由我的a扩展来处理。
我试过:
public class ANamedGridHelper<T extends NamedClass> {
public Column<T, ?> mapProperties(Grid grid) {
return grid.addColumn(NamedClass::getName).setId("name");
}
}
public class PersonGridHellper<Person>
{
----
}
但它不会编译
ANamedGridHelper
org/aarboard/gridtest1/ANamedGridHelper.java:[19,19] no suitable method found for addColumn(NamedClass::getName)
method com.vaadin.ui.Grid.addColumn(java.lang.String) is not applicable
(argument mismatch; java.lang.String is not a functional interface)
method com.vaadin.ui.Grid.addColumn(com.vaadin.data.ValueProvider) is not applicable
(argument mismatch; invalid method reference
method getName in class org.aarboard.gridtest1.NamedClass cannot be applied to given types
required: no arguments
found: java.lang.Object
reason: actual and formal argument lists differ in length)
org/aarboard/gridtest1/ANamedGridHelper.java:[19,30] invalid method reference
non-static method getName() cannot be referenced from a static context