Skip to content

Instantly share code, notes, and snippets.

@eggfly
Created August 27, 2024 11:19
Show Gist options
  • Save eggfly/10c5a6ad57e3962caebe0f0279165533 to your computer and use it in GitHub Desktop.
Save eggfly/10c5a6ad57e3962caebe0f0279165533 to your computer and use it in GitHub Desktop.
TypeErasure Interesting Code
package com.example;
import java.util.*;
public class TestErase {
public static class MyJsonObject implements Map<String, Object> {
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean containsKey(Object key) {
return false;
}
@Override
public boolean containsValue(Object value) {
return false;
}
@Override
public Object get(Object key) {
return null;
}
@Override
public Object put(String key, Object value) {
return null;
}
@Override
public Object remove(Object key) {
return null;
}
@Override
public void putAll(Map<? extends String, ?> m) {
}
@Override
public void clear() {
}
@Override
public Set<String> keySet() {
return Set.of();
}
@Override
public Collection<Object> values() {
return List.of();
}
@Override
public Set<Entry<String, Object>> entrySet() {
return Set.of();
}
}
private static class MyCallback implements MyInterface {
@Override
public void onEvent(Event event) {
MyJsonObject j = new MyJsonObject();
event.setMap(j);
}
}
public static <T> void test() {
var myInterface = new MyInterface() {
@Override
public void onEvent(Event event) {
MyJsonObject j = new MyJsonObject();
event.setMap(j);
}
};
new MyInterface<Object>() {
@Override
public void onEvent(Event event) {
MyJsonObject j = new MyJsonObject();
event.setMap(j);
}
};
new MyInterface<>() {
@Override
public void onEvent(Event<Object> event) {
MyJsonObject j = new MyJsonObject();
// event.setMap(j);
}
};
EventWithoutType a = new EventWithoutType();
a.setMap(new HashMap<>());
}
static class Event<T> {
void setMap(Map<String, String> data) {
}
}
static class EventWithoutType {
void setMap(Map<String, String> data) {
}
}
static interface MyInterface<T> {
void onEvent(Event<T> event);
// void onEvent(Event<Object> event);
// void onEvent(Event<Object> event);
// void onEventWithoutType(EventWithoutType event);
}
public static void test2() {
MyJsonObject j = new MyJsonObject();
}
private static void sendEvent(Map<String, String> data) {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment