Buat implementasi secara dinamis dari kelas yang hampir cocok dengan antarmuka?

Katakanlah saya memiliki antarmuka ini:

public interface Foo {
  int getBar();
  String getName();
  // ... 10 other methods
}

Dan kemudian saya memiliki kelas ini, yang tidak dapat saya modifikasi:

public final class FooImpl {
  int getBar();
  String getFirstName(); 
  String getLastName(); 
  // ... 10 other methods which matches Foo
}

Saya perlu menggunakan nilai dari FooImpl ke metode yang menggunakan Foo. Cukup mudah untuk menulis pembungkus dengan tangan (misalnya dengan kelas anonim), yang mengimplementasikan Foo dan meneruskan semuanya ke metode terkait di FooImpl (kecuali untuk getName() yang memerlukan logika tambahan dari getFirstName dan getLastName). Apakah ada cara (sebaiknya dari perpustakaan umum seperti Guava) untuk membuat pembungkus seperti itu secara dinamis mengingat persyaratan bahwa:

  • Saya ingin menentukan logika khusus untuk satu atau dua metode
  • Selebihnya, teruskan saja ke metode dengan nama yang sama

person user69715    schedule 12.12.2016    source sumber
comment
Betapapun menyakitkannya saya untuk menyarankan ini... sudahkah Anda mencoba dengan proxy dinamis?   -  person Joe C    schedule 13.12.2016


Jawaban (1)


Ada jalan. jika Anda membuat referensi Objek antarmuka Anda yang berisi referensi Objek kelas Anda yang mengimplementasikan antarmuka itu. Kemudian referensi Objek tersebut dapat mengakses benda tersebut.

person Rahul Modak    schedule 12.12.2016