10 Şubat 2020 Pazartesi

Effective Java

Giriş
2017 basımı Edition 3'te toplam 90 madde var.
Item 1 Static Factory Methods
Sınıflarda isimsiz constructor yerine ne işe yaradığını daha anlaşılır olan static metodlar kullanılabilir.

Item - 2 Consider a Builder When Faced with Many Constructor Parameters
Örnek
Bu kod yerine
public Product(int ID, 
  String name, 
  String description, 
  String type, 
  String[] images, 
  BigDecimal price, 
  int quantity, int categoryId, int sellerId, OffsetDateTime createdAt) {
...
}
Şöyle yaparız
public static class ProductBuilder {
// Fields ... public ProductBuilder id(int id) { this.id = id; return this; } public ProductBuilder description(String description) { this.description = description; return this; } ... public Product build() { return new Product(this); } }

Item 8 - Avoid finalizers and cleaners
Şu uyarıya dikkat etmek gerekiyor.
There is a severe performance penalty for using finalizers.
Item 22 - Use Interfaces Only To Define Types
Örnek - Static Final Alan
Sadece static final alanlardan oluşan arayüz kötü bir tasarım. Effective Java kitabından bir alıntı şöyle
The constant interface pattern is a poor use of interfaces. That a class uses some constants internally is an implementation detail. Implementing a constant interface causes this implementation detail to leak into the class’s exported API. It is of no consequence to the users of a class that the class implements a constant interface
Yine kitaptan bir alıntı şöyle
There are several constant interfaces in the Java platform libraries...
These interfaces should be regarded as anomalies and should not be emulated.
Item 26 - Don't Use Raw Types
Sınıf içinde üye alan olarak Object[] kullanmak iyi değil

Örnek
Şu kod iyi değil.
class CustomArrayList<E> {

  private static final int INITIAL_CAPACITY = 10;
  private Object[] elementData;
  private int size = 0;


  public CustomArrayList() {
    elementData = new Object[INITIAL_CAPACITY];
  }
  ...
}
Şöyle yaparız
class CustomArrayList<E> {

  private E[] elementData;
  /* ... */

  public CustomArrayList() {
    elementData = (E[]) new Object[INITIAL_CAPACITY];
  }

  /* ... */

}
Item 47 : Prefer Collection to Stream as a return type
Şöyle yaparız
// Böyle değil
Stream<Integer> getValues();
Iterable<Integer> getValues();

// Böyle
Collection<Integer> getValues();
Açıklaması şöyle. Yani Collection hem Stream hem de Iterable nesneye zaten kolayca döndürülebilir.
The Collection interface is subtype of Iterable and has stream method. Therefore, Collection or an appropriate subtype is generally the best return type for a public, sequence returning method. If you are writing a method that returns a sequence of objects and you know that it will only be used in stream pipeline, then, you should feel free to return a stream.
Item 85 : Prefer alternatives to java serialization
JEP 290 - Serialization Filtering yazısına taşıdım

Item 90 - Consider Serialization Proxies Instead of Serialized Instances

Hiç yorum yok:

Yorum Gönder