Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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_Generics - Fatal编程技术网

Java 是否可以为方法指定不同的返回类型

Java 是否可以为方法指定不同的返回类型,java,generics,Java,Generics,我的想法是有一个验证器接口,它有方法getRealValue()。返回值取决于字段,它可以是String、Integer或Long值 我的机会是: 我可以将返回类型指定为Object,并在每次调用此方法后使用强制转换。(RuntimeError如果发生错误的强制转换) 我可以在实例化验证器时使用泛型的pass返回类型(我仍然必须使用casting,但在方法getRealValue中只能使用一次)。如果我忘记传递返回类型或传递错误类型,仍然RuntimeError 如果有一种方法可以将返回类型存储

我的想法是有一个验证器接口,它有方法
getRealValue()
。返回值取决于字段,它可以是
String
Integer
Long

我的机会是:

  • 我可以将返回类型指定为
    Object
    ,并在每次调用此方法后使用强制转换。(
    RuntimeError
    如果发生错误的强制转换)

  • 我可以在实例化验证器时使用泛型的pass返回类型(我仍然必须使用casting,但在方法
    getRealValue
    中只能使用一次)。如果我忘记传递返回类型或传递错误类型,仍然
    RuntimeError


  • 如果有一种方法可以将返回类型存储在验证器中并使用它?

    对于您的第一点,在运行时无法获得一个
    ClassCastException
    ,以防不适当的强制转换

    在第二种情况下,不需要强制转换,请参见以下示例:

    public interface Foo<T> {
        public T getValue(); 
    }
    
    公共接口Foo{
    公共T getValue();
    }
    
    。。。然后在其他地方:

    public class Blah<T> implements Foo<T> {
        @Override
        public T getValue() {
            // TODO write the code
            // note that because of type erasure you won't know what type T is here
            return null;
        }
    }
    
    Blah blah1 = new Blah<String>();
    String s = blah1.getValue();
    Blah blah2 = new Blah<Long>();
    // etc.
    
    public类Blah实现了Foo{
    @凌驾
    公共T getValue(){
    //要写代码吗
    //注意,由于类型擦除,您将不知道这里是什么类型的t
    返回null;
    }
    }
    
    。。。然后,在其他地方:

    public class Blah<T> implements Foo<T> {
        @Override
        public T getValue() {
            // TODO write the code
            // note that because of type erasure you won't know what type T is here
            return null;
        }
    }
    
    Blah blah1 = new Blah<String>();
    String s = blah1.getValue();
    Blah blah2 = new Blah<Long>();
    // etc.
    
    Blah blah1=新Blah();
    字符串s=blah1.getValue();
    废话废话2=新废话();
    //等等。
    
    最后,这里有一些文学作品给你:

    • 在爪哇
    • 在Java中(有关于铸造的部分)

    您这样做的愿望通常表明存在更深层次的设计问题。验证来自用户的数据是常见的问题。可以使用更好的设计吗?如果是python,我的解决方案简单易用。但是我对java很熟悉,我以前读过java、泛型和继承。我习惯了python风格。Xmmm在类对象转换中发现了有趣的方法。我会期待的。帮助和彻底+1:)