2016-04-04 2 views
0

Как объединить эти две функции, чтобы сделать мой код более эффективным? В настоящее время я просто перегружаю функции, позволяющие принимать целые числа и строки в качестве аргументов.Объединение функций Java без перегрузки

private void flushGrid(int grid[][], int replacement) { 
     for(int x=0;x<grid.length;x++) { 
      for(int y=0;y<grid[0].length;y++) { 
       grid[x][y] = replacement; 
      } 
     } 
    } 

private void flushGrid(String grid[][], String replacement) { 
    for(int x=0;x<grid.length;x++) { 
     for(int y=0;y<grid[0].length;y++) { 
      grid[x][y] = replacement; 
     } 
    } 
} 
+0

Вы не могли, действительно. –

ответ

1

Вы можете сделать свой метод общим по типу T. Нечто подобное,

private <T> void flushGrid(T grid[][], T replacement) { 
    for (int x = 0; x < grid.length; x++) { 
     for (int y = 0; y < grid[0].length; y++) { 
      grid[x][y] = replacement; 
     } 
    } 
} 

, который будет работать с String, Integer или любого другого ссылочного типа (но не примитивные типы, как int, long или double).

+2

Дженерики не поддерживаются примитивами, по крайней мере, не до Java 10. –

+0

Означает ли это, что класс должен быть общим? –

+0

@Xoce 웃 Пepeúpa Нет, вы можете сделать общий метод, не создавая общий класс. –

3

Сочетание этих двух методов не будет упрощать или более эффективно, но вы можете это сделать.

private void flushGrid(Object[] grid, Object replacement) { 
    for (int x = 0; x < grid.length; x++) { 
     for (int y = 0; y < Array.getLength(grid[0]); y++) { 
      Array.set(grid[x], y, replacement); 
     } 
    } 
} 

Обратите внимание, что это работает с примитивными массивами, а также с опорными массивами.

+0

Возможно, вы хотели написать 'Object [] [] grid'? Или '(Object []) сетка [0] .length'? Или даже '(Object []) сетка [x] .length'? – radoh

+0

@radoh Я должен был изменить это. Вы не можете передать его в 'Object []', если это примитивный массив. –

+0

О, хорошо, хорошо, не знал о 'Array. *' Methods :) – radoh

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