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