2013-02-18 6 views
1

Я хочу использовать метод indexOf, чтобы найти количество слов и буквы в строке.Передача общего типа в метод indexOf JAVA

метод IndexOf может принять:

indexOf(String s) 
indexOf(Char c) 
indexOf(String s, index start) 

Таким образом, метод может принимать Струны или символы и могут также принимать отправной точкой

Я хочу, чтобы иметь возможность передавать или строку или Символ в этот метод, поэтому я попытался использовать дженерики. Ниже приведен код и основные функции. Как вы можете видеть, я хочу иметь возможность работать с indexOf со строкой или символом, который я передаю. Если я передаю 's' в indexOf в String, он работает, но затем сработает, когда он пытается работать как Char. Большое спасибо заранее!

public static void main(String[] args) { 
    MyStringMethods2 msm = new MyStringMethods2(); 
    msm.readString(); 
    msm.printCounts("big", 'a'); 
} 

public <T> void printCounts(T s, T c) { 
    System.out.println("***************************************"); 
    System.out.println("Analyzing sentence = " + myStr); 
    System.out.println("Number of '" + s + "' is " + countOccurrences(s)); 

    System.out.println("Number of '" + c + "' is " + countOccurrences(c)); 
} 

public <T> int countOccurrences(T s) { 
    // use indexOf and return the number of occurrences of the string or 
    // char "s" 
    int index = 0; 
    int count = 0; 
    do { 
     index = myStr.indexOf(s, index); //FAILS Here 
     if (index != -1) { 
      index++; 
      count++; 
     } 
    } while (index != -1); 
    return count; 
} 
+1

Метод перегрузки просто не работает таким образом. Три отдельных метода indexOf существенно не связаны друг с другом, поэтому вы не можете использовать generics для интеллектуального вызова того или другого. – ruakh

+0

Ах, черт возьми, так не получается, в принципе, да? Если бы не было возможности проверить, какой тип класса является его общим объектом, а затем сделать (String), то indexOf ((String) s, index) & if (Char), то indexOf ((Char) s, index) – nearpoint

ответ

2

String.indexOf не использует дженерики. Он принимает определенные типы параметров. Вместо этого вы должны использовать перегруженные методы. Таким образом:

public int countOccurrences(String s) { 
    ... 
} 

public int countOccurrences(char c) { 
    return countOccurrences(String.valueOf(c)); 
} 
+0

Я изначально имел это как перегруженный метод, но просто хотел посмотреть, смогу ли я сделать это таким образом. Но после небольшого исследования не кажется, что это возможно с помощью метода indexOf, который не ожидает общего типа – nearpoint

+0

Большое спасибо за ответ! – nearpoint

Смежные вопросы