| // TARGET_BACKEND: JVM |
| // JVM_TARGET: 1.8 |
| // FILE: box.kt |
| |
| class MyMap<K, V> : JImpl<K, V>() |
| |
| fun box(): String { |
| val a = MyMap<Int, String>() |
| a.put(42, "OK") |
| return a.entries.iterator().next().value |
| } |
| |
| // FILE: J.java |
| |
| import java.util.*; |
| |
| public interface J<K, V> extends Map<K, V> { |
| @Override |
| default Set<Entry<K, V>> entrySet() { |
| return myEntrySet(); |
| } |
| |
| Set<Entry<K,V>> myEntrySet(); |
| } |
| |
| // FILE: JImpl.java |
| |
| import java.util.*; |
| |
| public class JImpl<K, V> implements J<K, V> { |
| private final Map<K, V> delegate = new HashMap<>(); |
| |
| @Override |
| public Set<Entry<K, V>> myEntrySet() { |
| return delegate.entrySet(); |
| } |
| @Override |
| public int size() { |
| return delegate.size(); |
| } |
| @Override |
| public boolean isEmpty() { |
| return delegate.isEmpty(); |
| } |
| @Override |
| public boolean containsKey(Object key) { |
| return delegate.containsKey(key); |
| } |
| @Override |
| public boolean containsValue(Object value) { |
| return delegate.containsValue(value); |
| } |
| @Override |
| public V get(Object key) { |
| return delegate.get(key); |
| } |
| @Override |
| public V put(K key, V value) { |
| return delegate.put(key, value); |
| } |
| @Override |
| public V remove(Object key) { |
| return delegate.remove(key); |
| } |
| @Override |
| public void putAll(Map<? extends K, ? extends V> m) { |
| delegate.putAll(m); |
| } |
| @Override |
| public void clear() { |
| delegate.clear(); |
| } |
| @Override |
| public Set<K> keySet() { |
| return delegate.keySet(); |
| } |
| @Override |
| public Collection<V> values() { |
| return delegate.values(); |
| } |
| } |