2016-04-04 24 views
0

Kodumu daha verimli hale getirmek için bu iki işlevi nasıl birleştirebilirim? Şu anda sadece tamsayıların ve dizelerin argüman olarak kabul edilmesine izin vermek için işlevleri aşırı yüklüyorum.Java İşlevlerini Aşırı Yüksüz Birleştirme

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

Gerçekten yapamazdınız. –

cevap

1

T türünde genel yönteminizi yapabilirsiniz. (int, long veya double gibi fakat temel türler) String, Integer ya da başka bir referans türü ile çalışacak bir şey gibi

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; 
     } 
    } 
} 

.

+2

Generics, en azından Java 10'dan önce değil, temel öğelerle desteklenmez. –

+0

Bu, sınıfın genel olması gerektiği anlamına mı geliyor? –

+0

@Xoce 웃 Пepeúpa Hayır, sınıfı jenerik yapmadan genel bir yöntem yapabilirsiniz. –

3

Bu iki yöntemi birleştirmek, daha basit veya daha verimli hale getirmeyecektir, ancak bunu yapabilirsiniz.

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

Not Bu, ilkel dizilerle ve ayrıca referans dizileriyle çalışır.

+0

Muhtemelen 'Object [] [] grid' yazmayı mı düşünüyorsunuz? Veya '(Object []) kılavuzu [0] .length'? Veya hatta '(Object []) grid [x] .length'? – radoh

+0

@radoh Bunu değiştirmeliydim. İlkel bir dizi ise 'Object [] 'a atamazsınız. –

+0

Tamam, güzel, Array hakkında bilmiyordum. * 'Yöntemleri :) – radoh