我想删除代码中的警告。我尝试了以下两个更改:
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.addColumn返回值时遇到错误:
类型不匹配:无法转换为Grid.Column&lt; KPIBusinessDisplay,捕获#13-of?&gt; to Grid.Column&lt; KPIBusinessDisplay,CalendarConstants.FREQUENCYUNITTYPES&gt;
如果我尝试不同的方式:
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()
);
我在setRenderer收到错误:
Grid.Column&lt; KPIBusinessDisplay类型中的方法setRenderer(ValueProvider&lt; capture#14-of?,P&gt;,Renderer&lt;?super P&gt;),捕获#14-of?&gt;不适用于参数(new ValueProvider&lt; CalendarConstants.FREQUENCYUNITTYPES,String&gt;(){},TextRenderer)
如果我这样使用它:
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()
);
然后我收到警告:
类型安全:方法setRenderer(ValueProvider,Renderer)属于原始类型Grid.Column。对泛型类型Grid.Column&lt; T,V&gt;的引用应该参数化
如何在不引发错误的情况下修复警告?
答案 0 :(得分:1)
发生编译器警告是因为编译器没有足够的类型信息来保证&#34;代码在运行时不会导致var client = new RestClient("https://example.com/openam/oauth2/access_token?grant_type=authorization_code&realm=/cbpgatqa");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Authorization", "Basic MzE4OGQwYjQtZTRlOC00MTZjLTg5NjAtZDNlYWFhMmNjY2IxOkx3NiVBa0x4NWtPM01rJTJ5RWwxbW1jR0ZYZmhTQmk1NHhIRCpzNiUyVUd5WXN0MCNVbyNMNWQhcVlpZE93djc=");
request.AddParameter("undefined", "code=" + AuthCode + "&redirect_uri=http%3A%2F%2Flocalhost%3A8080", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(response.Content)))
{
// Deserialization from JSON
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Token));
Token token = (Token)deserializer.ReadObject(ms);
return userinfo= GetuserInfo(token.id_token);
}
。这样做的原因是你正在使用&#34;魔法&#34;用于标识bean属性的字符串。编译器无法知道&#34; ClassCastException
引用"frequencyUnit"
中的方法getFrequencyUnit()
,因此也不知道您设置的渲染器是否兼容。
编译器警告基本上意味着如果将KPIBusinessDisplay
的返回类型更改为返回渲染器无法处理的类型的值,编译器就无法发出警告。
如果您不想取消这些警告,您可以改为创建列,使编译器能够识别类型之间的关系:getFrequencyUnit()
。
键入的时间稍长,但如果更改Grid.Column<KPIBusinessDisplay, FREQUENCYUNITTYPES> frequencyUnitColumn = grid.addColumn(KPIBusinessDisplay::getFrequencyUnit);
的返回类型,编译器可以立即为您检测问题。此外,如果在IDE中使用重构功能更改getFrequencyUnit
的名称,则IDE还将自动更新getFrequencyUnit
中的代码。如果使用字符串,则不会出现这种情况。