如何在java中创建泛型返回类型

时间:2013-06-03 04:17:55

标签: java return-type

您好我在java中有以下场景: 我有很多课,每个班有很多方法。现在这个方法返回整数(注意:所有方法都返回一些计算值作为整数)。明天这个方法可以返回与字符串或任何其他数据类型(如long等)相同的计算值。现在,将每个方法的返回类型更改为所需的返回类型将是一项繁琐的工作。 [注意:这种情况是因为我在框架开发下,我的框架现在不稳定,所以这样的事情不断变化]。我想知道这是否可能,创建一个返回类型,现在将指向整数,然后在每个方法中使用此返回类型,所以明天,如果我要更改此方法的返回类型,那么我只需要在一个特定的地方改变并自动返回类型会改变?关于此的任何指示。 TIA。

4 个答案:

答案 0 :(得分:1)

听起来你想要泛型,但需要注意的是,转换从编码方法返回的类型,只有它们返回的定义是没有魔力的:

public interface Calculator<T> {
    public T method1();
    public T method2();
    public T method3();
}

public class IntegerCalculator implements Calculator<Integer> {
    public Integer method1() [
        // some implementation that returns an Integer
    }
    // similar for method2 and method3, which also return Integer
}

public class LongCalculator implements Calculator<Long> {
    // similar to IntegerCalculator but all methods return Long
}

您的客户可以定义要使用的代码:

Calculator<Integer> = new IntegerCalculator();

但稍后改为

Calculator<Long> = new LongCalculator();


您仍然需要为要使用的所有类型实现编写方法代码,并且您的客户端代码同样必须更改为一般工作,但这就是我要做的。

答案 1 :(得分:0)

您可以使用这样的通用方法:

public class NewClass {

    public static void main(String []areg){
     NewClass nc = new NewClass();
     nc.getObject(new Integer(123));
     nc.getObject("abc");
     nc.getObject(new Long(2));
    }

  public <T> T getObject(T type)
  {
  return type;
 }
}
在您的调用代码中,您可以检查返回的类型并继续。

答案 2 :(得分:0)

它不仅是返回类型的方法。如果要在某个时刻返回一个大整数,则还需要更改方法代码以实际计算这样的值。您的return语句也需要更改,而不仅仅是方法签名。 如果继续在方法中计算整数,那么返回BigInteger是没有意义的。那么一个工具如何重构你的代码以及它所使用的每一个地方呢?

我能看到的最好的事情是,如果您使用的是Java IDE,一旦更改了方法签名,它就会在存在类型不匹配的情况下输出错误,您可以通过这些错误并手动修复。

我猜你的项目很小,对于大型项目来说,无论如何重构都是无法管理的......

答案 3 :(得分:0)

您可以创建一个类。这是您的用户定义类型。 如:

public class ReturnType {
private Object value;

public ReturnType(Object value){
    this.value = value;
}

public Integer getIntValue(){
    if(value instanceof Integer)
        return (Integer)value;
    return null;    
}
public Long getLongValue(){
    // todo 
}

public String getStringValue(){
    //todo
}

}

你的方法的返回类型应该是'ReturnType'类的实例。

像:

    public ReturnType myMethod();

在另一些时候,您可以添加/删除或修改ReturnType类中的方法。