Java: bir yöntem çağrısından iki intr döndürme

Kodumda çok sayıda 2 boyutlu koordinatla çalışan çok şey yapıyorum:

int[] getSize() {
    int[] res = {gridRows, gridColumns};
    return res;
}

Küçük bir sınıf tanımlayabileceğimi ve tip güvenliği sağlayabileceğimi biliyorum, çünkü benim koduma dahil etmem gereken kendi küçük önemsiz .java dosyasında böyle bir önemsiz sınıfa sahip olmama beni rahatsız ediyor.

Bunun çirkin, kötü veya kötü olduğunu mu düşünüyorsun? Yoksa sen de mi yaparsın?

3

6 cevap

Eğer projenizde kapsüllemek istediğiniz bir kavram varsa, örneğin, bu iki rengin koordinatları, onlar için bir Sınıf olmanın yanlış bir yanı yoktur. Benim düşünceme göre, o zaman herkesin bir dizi, vb.

Örneğin, aynı projede başka biri gelişiyor ve yönteminizi çağırıyorsa, iki konumlu bir int dizisi veya Koordinatlar adlı bir nesne almanın daha net olduğunu düşünüyor musunuz?

Ayrıca, eğer bir Sınıf kullanırsanız, doğru bir OO modasıyla kapsüllenebilen koordinatları karşılaştırmak gibi şeyler uygulamak isteyebilirsiniz. (Lütfen Nesne sözleşmesine uymayı unutmayın. Eşitlik gibi bir şey yeniden tanımladıysanız).

12
katma

Bu durumda, Puan 'ı kullanabilirsiniz.

Genel olarak, estetik bir yana, çoğu zaman, bu mantığın her yere yayılmasından ziyade, onları tutmak için bir sınıf yapmak anlamında, böyle bir şeyle ilgili yeterli önemsiz yardımcı yöntemler vardır. Bazen hata ayıklama ve günlüğe kaydetme için iyi toString() bile yeterlidir.

Çok yüksek performansın söz konusu olduğu durumlarda, yüksek trafikte önemsiz yardım yöntemleri nihai hale getirin;

Potansiyel üyelerin sahip oldukları tek şey, bir işlev tarafından döndürülmeleriyse, daha fazla ortak noktaya sahip oldukları bir geleceği görebiliyorsanız kesinlikle bir sınıf çıkarmanızdır.

Bazı durumlarda, boşluğu iade etmeyi ve yöntemin dönüş değerlerini ayarlayabileceği bir türden daha geniş kapsamlı bir bağlam nesnesini geçirmeyi düşünün. Bu büyük bir dikkatle kullanılmalıdır - kolayca kavrama kaymasına neden olabilir.

3
katma

onu yuvalanmış bir statik sınıf olarak tanımlayabilirsiniz

sınıfın çok daha fazlasına izin vereceğinden bahsetmemek gerekirse (örneğin 2 boyutlu koordinatlardaki işlemleri bir noktada tanımlayın, bir kümeye koyun (eşittir dizilerdeki gibi işe yaramaz))

2
katma

Yöntemin dönüş değerlerini tutmak için bir iç sınıf oluşturabilirsiniz. Bunun yeni bir .java dosyası gerektirmemesi avantajı vardır:

public class Parent{
  public Size getSize() {
    return new Size(gridRows, gridColumns);
  }

  public static class Size{
    //...
  }
}

Parent parent = new Parent();
Parent.Size size = parent.getSize();

Sınıfı "statik" olarak tanımlamak, temel olarak, normal bir sınıf gibi ele alınabileceği anlamına gelir ( Boyut yerine Parent.Size kullanmak zorunda olmanız dışında). Eğer sınıf "statik" değilse, o zaman outter sınıfının bir örneğini almadan yeni bir örneği oluşturamazsınız.

1
katma

Maalesef java'da bu, birden çok değeri döndürmenin en iyi yoludur. Genellikle Diziler veya Listeler kullanırım. Her ne kadar onun için bir "sınıf" yaratıldığını düşünmüyorum, ama bu gereksizdir.

0
katma

Java'nın birden fazla değeri yöntemlerden döndüremediğini düşünürsek, yaptığınız şey, aynı türden birden fazla değere sahip olmak için tek tercihtir: . Değerler farklı türden ise, dönüş değerlerini kapsüllemek için küçük bir sınıf (bir çeşit değer nesnesi) yazmanız gerekir.

Başka bir, hatta en çirkin seçenek, dizileri parametre olarak iletmek ve geri dönüş değerlerini - Java'da aktarma referansını taklit etmek için - bırakmaktır. Çok cesaret kırıldı.

0
katma