-3

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

4

4 回答 4

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();


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

于 2013-06-03T05:34:42.880 回答
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;
 }
}

在您的调用代码中,您可以检查返回的类型并继续。

于 2013-06-03T04:49:01.017 回答
0

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

我能看到的最好的事情是,如果您使用的是 Java IDE,一旦您更改了方法签名,它将为您输出类型不匹配的错误,您可以检查这些错误并手动修复。

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

于 2013-06-03T04:50:02.177 回答
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 类中的方法。

于 2013-06-03T04:58:09.387 回答