Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,与对象无关的空返回_Java - Fatal编程技术网

Java,与对象无关的空返回

Java,与对象无关的空返回,java,Java,给定Java源代码和预处理器(如C++),我想用一个返回null的函数来替换所有提到的null。它找到对null的调用,并用以下函数替换它 public static Object returnNull(){ return null; } 此操作失败,因为存在不同的类和: functionThatWantsCustomClass( returnNull() ); //Object cannot be converted to CustomClass 或 等等 我能想象的最简单的解决方

给定Java源代码和预处理器(如C++),我想用一个返回null的函数来替换所有提到的null。它找到对null的调用,并用以下函数替换它

public static Object returnNull(){
    return null;
}
此操作失败,因为存在不同的类和:

functionThatWantsCustomClass( returnNull() ); //Object cannot be converted to CustomClass

等等

我能想象的最简单的解决方案是必须对预处理器进行参数化,尽管这需要通过每一个null来添加参数,例如:
null/*CustomClass*/

另一种方法是花费大量时间编写更好的解析器,以便始终知道returnTypedNull()函数所需的类

public static Object returnNull(){
    return null;
}
有没有一种方法可以通过最少的修改/解析来克服这个错误

使用:

然后它将失败,出现错误
,方法errlog(Exception)对于CustomClass
类型是不明确的,因为编译器不知道
t
应该是
Exception
还是
String
,即调用这两个类型中的哪一个

您必须明确地告诉编译器:

cc.errlog( Test.<Exception>returnNull() );
cc.errlog(Test.returnNull());
使用:

然后它将失败,出现错误
,方法errlog(Exception)对于CustomClass
类型是不明确的,因为编译器不知道
t
应该是
Exception
还是
String
,即调用这两个类型中的哪一个

您必须明确地告诉编译器:

cc.errlog( Test.<Exception>returnNull() );
cc.errlog(Test.returnNull());
使用ant,它会工作的。 例如:

public类返回值示例{
公共静态void main(字符串[]args){
ReturnNullExample=new ReturnNullExample();
someMethod(ReturnNullClass.returnNull());
CustomClass cc=null;
如果(cc==ReturnNullClass.returnNull()){
System.out.println(“cc为空”);
}
cc=新的CustomClass();
如果(cc!=ReturnNullClass.returnNull()){
System.out.println(“cc不为空”);
}
}
公共方法(CustomClass CustomClass){
System.out.println(“此方法不执行任何操作”);
}
}
类自定义类{
私有整数;
public int getNumber(){
返回号码;
}
公共无效集合号(整数){
这个数字=数字;
}
}
类返回空类{
公共静态T returnNull(){
返回null;
}
}
使用ant,它会工作的。 例如:

public类返回值示例{
公共静态void main(字符串[]args){
ReturnNullExample=new ReturnNullExample();
someMethod(ReturnNullClass.returnNull());
CustomClass cc=null;
如果(cc==ReturnNullClass.returnNull()){
System.out.println(“cc为空”);
}
cc=新的CustomClass();
如果(cc!=ReturnNullClass.returnNull()){
System.out.println(“cc不为空”);
}
}
公共方法(CustomClass CustomClass){
System.out.println(“此方法不执行任何操作”);
}
}
类自定义类{
私有整数;
public int getNumber(){
返回号码;
}
公共无效集合号(整数){
这个数字=数字;
}
}
类返回空类{
公共静态T returnNull(){
返回null;
}
}

您是否考虑过使用java.util.Optional而不是null?这似乎是不明智的。表达式
null
与返回
null
的方法调用不同,因为前者是特殊的
null
类型(因此可以添加到
列表中),而后者是引用类型。为什么要这样做?是否考虑过使用java.util.Optional而不是null?这似乎是不明智的。表达式
null
与返回
null
的方法调用不同,因为前者是特殊的
null
类型(因此可以添加到
列表中),而后者是引用类型。为什么要这样做?这修复了很多错误,但当null作为参数发送到函数时,仍然会出现错误。错误:类CustomClass中的方法errlog无法应用于给定类型;如果(cc!=returnOtherNull())cc.errlog(returnNull());必需:例外。找到:对象。原因:无法通过方法调用转换将实际参数对象转换为异常。(使用泛型分别定义两个返回null,如果一个通过,则方法一失败)。我收到了新的不相关错误,所以我会先修复这些错误,可能它们会干扰编译。cc是CustomClass的实例,errlog是
公共静态同步无效errlog(异常e)
,如果不为null,它会打印异常,如果为null,则打印“error”。就像我说的,我得到了不相关的错误,所以我需要在确定它是否正常工作之前消除它们,但是我看到的所有与returnNull相关的错误都是以一个错误的形式出现的。整个项目中只有一个errlog定义。好的,在修复了所有错误之后,我仍然有这个。通过从JDK6升级到JDK7,最终升级到JDK8(我不知道它是否运行,但它可以编译),解决了这个问题。因此,在进行方法调用转换时,有一些泛型从7更改为8,这使得这成为可能。为了完整起见,请将此添加到您的答案中,或者如果您知道/找到它,请将其添加到官方更改中。这修复了许多错误,但当null作为参数发送到函数时,我仍然会收到错误。错误:类CustomClass中的方法errlog无法应用于给定类型;如果(cc!=returnOtherNull())cc.errlog(returnNull());必需:例外。找到:对象。原因:无法通过方法调用转换将实际参数对象转换为异常。(使用泛型分别定义两个返回null,如果一个通过,则方法一失败)。我收到了新的无关错误,所以我会先修复这些错误,
class CustomClass {
    void errlog(Exception e) {
    }
    void errlog(String s) {
    }
}
cc.errlog( Test.<Exception>returnNull() );
public class ReturnNullExample {

    public static void main(String[] args) {

        ReturnNullExample example = new ReturnNullExample();
        example.someMethod(ReturnNullClass.returnNull());

        CustomClass cc = null;
        if(cc == ReturnNullClass.returnNull()) {
            System.out.println("cc is null");
        }

        cc = new CustomClass();
        if(cc != ReturnNullClass.returnNull()) {
            System.out.println("cc is not null");
        }
    }

    public void someMethod(CustomClass customClass) {
        System.out.println("This method does nothing");
    }
}

class CustomClass {

    private int number;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

class ReturnNullClass {

    public static <T> T returnNull() {
        return null;
    }
}