if子句和泛型方法返回boolean

时间:2016-04-13 06:06:25

标签: java eclipse

我有一个泛型方法,在特定场景中返回一个布尔值。

我方法的方法签名就是例如。

public <T> T get() { return Boolean.true;}

到此为止,它没有编译错误,工作正常。 虽然,当我尝试在if子句中使用相同的内容时,比如

if(get())

然后它返回错误说

  

类型不匹配:无法从Object转换为布尔值

我也怀疑这种情况只发生在日食中。这是一个现有的代码,我试图在我的工作区中编译。

请帮忙。

更新

本文很好地解释了目标类型推断 - https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

并且如下面@Codebender所解释的,TargetType推理适用于链式/嵌套方法,虽然它看起来不适用于if,for,while等语言结构。 我试着在下面写一个方法 -

 public void test(boolean val)

并尝试将其称为

test(get())

它工作正常。

解决方案:

最后在这段代码中,我最终添加了类似

的显式类型转换
if((Boolean)get())

它对我有用。

4 个答案:

答案 0 :(得分:2)

要做到这一点:

 if(get())

你需要一个类似于get方法的返回类型的布尔值,如下所示:

  public <T> boolean get() {...

答案 1 :(得分:0)

为什么不将方法定义为

public <T> boolean get() { return Boolean.TRUE;}

在这种情况下,您将不会收到编译错误,并按原样定义返回参数。在原始定义中,您希望该方法返回T而非boolean类型的内容。

更新:您的代码不使用泛型。并且没有方法可以在您计划使用的if语句中使用泛型返回值,因为Java没有像脚本语言那样的“虚假”值(例如Python)。这里有一个通用方法的替代方法是添加一些通用值作为参数,并在方法体中对它做一些事情:

public <T> boolean get(T some value) { return Boolean.TRUE;}

但是如果你想在if中使用结果,那么考虑添加如下内容:

if(get() != null) {...}

它也适用于通用方法。如果您始终从boolean返回get()值,则无需使用泛型。

答案 2 :(得分:0)

代码在Java 8中可以正常工作(因为通用类型推断)...但不是在Java 7及更低版本中。

请参阅我的这个答案,了解广义类型推断是什么:https://stackoverflow.com/a/32294457/2775450以及:https://stackoverflow.com/a/28474319/2775450

除此之外,您的代码似乎还有其他错误,例如Boolean.TRUE而不是Boolean.true,您应该在T中明确转换为$(document).on("click", ".product_imgfiles a", function() { $( this ).parent().parent().remove(); }); 退货声明。

答案 3 :(得分:0)

I think this is happening because if you see in the method signature 
public <T> T get(), you are making it Generics but in the return statement, boolean value is returned. So to make it work just try to change the return type in the method signature like below:- 
public static <T> Boolean get() { 
        return Boolean.TRUE;
}
then use it in the if condition :- if(get()){   }