Java Vaadin网格列设置泛型参数
我想删除代码中的警告。我尝试了以下两个更改:Java Vaadin网格列设置泛型参数,java,generics,grid,vaadin,Java,Generics,Grid,Vaadin,我想删除代码中的警告。我尝试了以下两个更改: grid = new MyGrid<>(KPIBusinessDisplay.class); grid.setColumns(); grid.addColumn("frequency"); Grid.Column<KPIBusinessDisplay, FREQUENCYUNITTYPES> frequencyUnitColumn = grid.addColumn("frequency
grid = new MyGrid<>(KPIBusinessDisplay.class);
grid.setColumns();
grid.addColumn("frequency");
Grid.Column<KPIBusinessDisplay, FREQUENCYUNITTYPES> frequencyUnitColumn = grid.addColumn("frequencyUnit");
frequencyUnitColumn.setRenderer(new ValueProvider<FREQUENCYUNITTYPES, String>()
{
private static final long serialVersionUID = 6833675800012389627L;
@Override
public String apply(FREQUENCYUNITTYPES source) {
return messageByLocaleService.getMessage(source.name());
}}, new TextRenderer()
);
grid=newmygrid(KPIBusinessDisplay.class);
grid.setColumns();
网格。添加列(“频率”);
Grid.Column frequencyUnitColumn=Grid.addColumn(“frequencyUnit”);
frequencyUnitColumn.setRenderer(新的ValueProvider()
{
私有静态最终长serialVersionUID=6833675800012389627L;
@凌驾
公共字符串应用(FREQUENCYUNITTYPES源){
返回messagebylocalService.getMessage(source.name());
}},新文本渲染器()
);
在这种情况下,我在分配grid.addColumn返回值时出错:
类型不匹配:无法从Grid.Column转换为Grid.Column
如果我尝试不同的方法:
Grid.Column<KPIBusinessDisplay, ?> frequencyUnitColumn = grid.addColumn("frequencyUnit");
frequencyUnitColumn.setRenderer(new ValueProvider<FREQUENCYUNITTYPES, String>()
{
private static final long serialVersionUID = 6833675800012389627L;
@Override
public String apply(FREQUENCYUNITTYPES source) {
return messageByLocaleService.getMessage(source.name());
}}, new TextRenderer()
);
Grid.Column frequencyUnitColumn=Grid.addColumn(“frequencyUnit”);
frequencyUnitColumn.setRenderer(新的ValueProvider()
{
私有静态最终长serialVersionUID=6833675800012389627L;
@凌驾
公共字符串应用(FREQUENCYUNITTYPES源){
返回messagebylocalService.getMessage(source.name());
}},新文本渲染器()
);
我在setRenderer上得到错误:
方法setRenderer(ValueProvider,Renderer编译器警告之所以发生,是因为编译器没有足够的类型信息来“保证”代码在运行时不会导致
ClassCastException
。原因是您正在使用“魔术”字符串来标识bean属性。编译器无法“知道”“frequencyUnit”
引用了KPIBusinessDisplay
中的方法getFrequencyUnit()
,因此它也不知道您正在设置的渲染器是否兼容
编译器警告基本上意味着,如果将getFrequencyUnit()
的返回类型更改为呈现程序无法处理的类型的返回值,编译器将无法警告您
如果您不想抑制这些警告,您可以改为以使编译器知道类型之间关系的方式创建列:Grid.column frequencyUnitColumn=Grid.addColumn(KPIBusinessDisplay::getFrequencyUnit);
输入时间稍长,但其好处是,如果更改
getFrequencyUnit
的返回类型,编译器可以立即为您检测问题。此外,如果使用IDE中的重构功能更改getFrequencyUnit
的名称,则IDE也会自动更新中的代码>addColumn
。如果使用字符串,则不会出现这种情况。编译器出现警告是因为编译器没有足够的类型信息来“保证”代码在运行时不会导致ClassCastException
。原因是您使用的是“魔术”用于标识bean属性的字符串。编译器无法“知道”中的“frequencyUnit”
引用了KPIBusinessDisplay
中的方法getFrequencyUnit()
,因此它也可能不知道您正在设置的呈现程序是否兼容
编译器警告基本上意味着,如果将getFrequencyUnit()
的返回类型更改为呈现程序无法处理的类型的返回值,编译器将无法警告您
如果您不想抑制这些警告,您可以改为以使编译器知道类型之间关系的方式创建列:Grid.column frequencyUnitColumn=Grid.addColumn(KPIBusinessDisplay::getFrequencyUnit);
输入时间稍长,但其好处是,如果更改
getFrequencyUnit
的返回类型,编译器可以立即为您检测问题。此外,如果使用IDE中的重构功能更改getFrequencyUnit
的名称,则IDE也会自动更新中的代码>addColumn
。如果使用字符串,则不会出现这种情况。就像一个符咒一样工作。我只需添加setId
即可使该列像以前一样工作:Grid.column frequencyUnitColumn=Grid.addColumn(KPIBusinessDisplay::getFrequencyUnit).setId(“frequencyUnit”)
工作起来很有魅力。我只需添加setId
就可以使列像以前一样工作:Grid.column frequencyUnitColumn=Grid.addColumn(KPIBusinessDisplay::getFrequencyUnit).setId(“frequencyUnit”);
Grid.Column frequencyUnitColumn = grid.addColumn("frequencyUnit");
frequencyUnitColumn.setRenderer(new ValueProvider<FREQUENCYUNITTYPES, String>()
{
private static final long serialVersionUID = 6833675800012389627L;
@Override
public String apply(FREQUENCYUNITTYPES source) {
return messageByLocaleService.getMessage(source.name());
}}, new TextRenderer()
);