2012-01-17 68 views
0

我需要编写一个可以同时使用数组和字符串引用的泛型方法。在这样的方法里面,根据参数,我需要检查是否平等以及索引。对于数组,索引当然是[] operator,但对于String而言,它的方法是charAt()。另外,我想遍历参数,因此对于数组我将使用length字段,对于字符串I将使用length()方法。为了平等,我需要在数组中使用equals()方法,在字符串中使用==作为字符。数组和字符串的java泛型

这是我最好写两个单独的重载方法,或值得努力使其成为一种通用的方法。

如果在后一种情况下,该怎么做?

+0

你用这种方法试图达到什么目的? – legendofawesomeness 2012-01-17 20:20:15

+0

过载;你正在采取不同的类型。 – 2012-01-17 20:22:35

回答

0

从你对问题的描述中,你几乎肯定会写出两个重载的方法。

目前尚不清楚将它们合并成一个是否会获得什么 - 如果有的话。但是,这样做可能需要付出不小的努力,其结果可能会相当复杂。

此外,一个可以同时使用数组和String的方法将不得不采用Object作为它的参数。一旦你接受Object,人们将能够通过很多来调用你的方法,它不会知道如何处理;而不是编译时失败,组合的方法将不得不在运行时失败。

0

我想你试图达到相同的char[]-S和String-S。不值得编写泛型方法(imo,因为java中缺少操作符重载),但是您可以轻松地将char[]转换为String(反之亦然),然后执行相同的代码(如果没问题)。

+0

不一定是char [],我可以使用一些花哨的对象'myObjs []',其中'equals()'被覆盖。 :) – 2012-01-17 20:28:20

+0

在这种情况下,绝对不同的方法。 (由于缺少重载),但我无法想象当你对字符串字面类型和“其他”类型做同样的事情时的情况。 – zeller 2012-01-17 20:30:01

1

java中的数组是对象,因此您可以编写一个方法来接收一个Object并使用“instanceof”函数进行测试。

public class MethodTest { 

public static void main(String[] args) { 
    String[] tst = new String[]{"SOME","TEXT"}; 
    doSomething(tst); 
    doSomething("TEST"); 
} 

public static void doSomething(Object o) { 
    if(o instanceof String) { 
     System.out.println((String) o); 
    } else if(o instanceof String[]) { 
     String something[] = (String[]) o; 
     for(String s : something) { 
      System.out.println(s); 
     } 
    } 
} 

} 

但我认为两种方法将是一个最好的方法......

+0

数组+1是对象 – zeller 2012-01-17 20:26:46

0

超载的方法。以通用的方式解决这个问题的努力将会是浪费并且很可能是不可读的。

+0

所以它可以在Java泛型中解决吗?大声笑 – 2012-01-17 20:30:04