μ λ€λ¦μ΄λ ?
νμ ν λ³νμμ λ°μν μ μλ λ¬Έμ μ μ μ¬μ μ μμ μ€
public class CastingDto implements Serializable {
private Object object;
public void setObject(Object object) {
this.object = object;
}
public Object getObject() {
return object;
}
}
β³οΈ μμ μ½λμμ μ λ€λ¦μ μ¬μ©νλ©΄
public class CastingGenericDto<T> implements Serializable {
private T object;
public void setObject(T obj) {
this.object = obj;
}
public T getObject() {
return object;
}
}
π μ¬κΈ°μ μλ Tλ μλ¬΄λ° μ΄λ¦μ΄λ μ§μ ν΄λ μ»΄νμΌνλ λ° μ§μ₯ μμ
public static void main(String[] args) {
GenericSample sample = new GenericSample();
sample.checkGenericDto();
}
public void checkGenericDto() {
CastingGenericDto<String> dto1 = new CastingGenericDto<String>)();
dto1.setObject(new String());
CastingGenericDto<String> dto2 = new CastingGenericDto<StringBuffer>();
dto2.setObject(new StringBuffer());
CastingGenericDto<String> dto3 = new CastingGenericDto<StringBuilder>();
dto3.setObject(new StringBuilder());
}
String temp1 = dto1.getObject();
String temp2 = dto2.getObject();
String temp3 = dto3.getObject();
π ν λ³νν νμκ° μμ΄μ§
π μλͺ»λ νμ μΌλ‘ μΉννλ©΄ μ»΄νμΌ μμ²΄κ° μλλ―λ‘ μ€νμμ λ€λ₯Έ νμ μΌλ‘ μλͺ» ν λ³ννμ¬ μμΈκ° λ°μνλ μΌμ μμ
μ λ€λ¦ νμ μ μ΄λ¦ μ νκΈ°
μλ°μμ μ μν κΈ°λ³Έ κ·μΉ
- E : μμ
- K : ν€
- N : μ«μ
- T : νμ
- V : κ°
- S, U, V : λ λ²μ§Έ, μΈ λ²μ§Έ, λ€ λ²μ§Έμ μ μΈλ νμ
μ λ€λ¦μ μλ λ¬Όμν
public class WildcardGeneric<W> {
W wildcard;
public void setWildcard(W wildcard) {
this.wildcard = wildcard;
}
public W getWildcard() {
return wildcard;
}
}
public class WildcardSample {
public static void main(String[] args) {
WildcardSample sample = new WildcardSample();
sample.callWildcardMethod();
}
public void callWildcardMethod() {
WildcardGeneric<String> wildcard = new WildcardGeneric<String>();
wildcard.setWildcard("A");
wildcardMethod(wildcard);
}
public void wildcardMethod(WildcardGeneric<String> c) {
String value = c.getWildcard();
System.out.println(value);
}
}
π wildcardMethod()μ 맀κ°λ³μλ λ°λμ Stringμ μ¬μ©νλ WildcardGeneric κ°μ²΄λ§ λ°μ μ μμ
λ§μ½ λ€λ₯Έ νμ μΌλ‘ μ μΈλ WildcardGeneric κ°μ²΄ (WildcardGeneric<Integer>)λ₯Ό λ°μΌλ €λ©΄....?
public void wildcardMethod(WildcardGeneric<?> c) {
Object value = c.getWildcard();
System.out.println(value);
}
π μ΄λ κ² String λμ μ ?λ₯Ό μ μ΄μ£Όλ©΄ μ΄λ€ νμ μ΄ μ λ€λ¦ νμ μ΄ λλλΌλ μκ΄μμ
π λ¬Όμνλ‘ λͺ μν νμ μ μμΌλμΉ΄λλΌκ³ ν¨ !
public void callWildcardMethod() {
// WildcardGeneric<String> wildcard = new WildcardGeneric<String>();
WildcardGeneric<?> wildcard = new WildcardGeneric<String>();
wildcard.setWildcard("A");
wildcardMethod(wildcard);
}
π μμΌλμΉ΄λλ λ©μλμ λ§€κ° λ³μλ‘λ§ μ¬μ©νλ κ²μ΄ μ’μ
λ§μ½ μμ κ°μ΄ μ¬μ©νλ€λ©΄, μ μμ μΈ μ»΄νμΌμ΄ λμ§ μλλ€ !
μ μ μλ νμ μ Stringμ μ§μ ν μ μκΈ° λλ¬Έμ΄λ€.
μ΄λ€ κ°μ²΄λ₯Ό μμΌλμΉ΄λλ‘ μ μΈνκ³ , κ·Έ κ°μ²΄μ κ°μ κ°μ Έμ¬ μλ μμ§λ§ κ°μ²΄μ μ λ€λ¦ νμ μΌλ‘ κ°μ μ§μ νλ κ²μ λΆκ°λ₯ !
μ λ€λ¦ μ μΈμ μ¬μ©νλ νμ μ λ²μ μ§μ νκΈ°
"?" λμ μ "? extends νμ "μΌλ‘ μ ννλ©΄ μ¬μ©νλ νμ μ μ νν μ μμ = Bounded Wildcards
public class Car {
protected String name;
public Car(String name) {
this.name = name;
}
public String toString() {
return "Car name = " + name;
}
}
public class Bus extends Car {
public Bus(String name) {
super(name);
}
public String toString() {
return "Bus name = " + name;
}
}
public void callBoundedWildcardMethod() {
// WildcardGeneric<Car> wildcard = new WildcardGeneric<Car>();
// wildcard.setWildcard(new Car("A"));
WildcardGeneric<Bus> wildcard = new WildcardGeneric<Bus>();
wildcard.setWildcard(new Bus("B"));
wildcardMethod(wildcard);
}
public void boundedWildcardMethod(WildcardGeneric<? extends Car> c) {
Car value = c.getWildcard();
System.out.println(value);
}
π boundedWildcardMethod()μ 맀κ°λ³μμλ λ°λμ Car ν΄λμ€λ₯Ό νμ₯ν ν΄λμ€κ° λμ΄μμΌ ν¨
π bounded wildcardsλ‘ μ μΈν νμ μλ κ°μ ν λΉν μ μκ³ , μ‘°νμ© λ§€κ°λ³μλ‘ μ¬μ©ν΄μΌ ν¨ !
λ©μλλ₯Ό μ λ€λ¦νκ² μ μΈνκΈ°
wildcardλ‘ λ©μλλ₯Ό μ μΈνμ λμ κ°μ₯ ν° λ¨μ π μ μΈλ κ°μ²΄μ κ°μ μΆκ°ν μ μμ
β³οΈ ν΄κ²° λ°©λ²
public <T> void genericMethod(WildcardGeneric<T> c, T addValue) {
c.setWildcard(addValue);
T value = c.getWildcard();
System.out.println(value);
}
- λ¦¬ν΄ νμ μμ <>λ‘ μ λ€λ¦ νμ μ μΈ
- λ§€κ° λ³μμλ κ·Έ μ λ€λ¦ νμ μ΄ ν¬ν¨λ κ°μ²΄ λ°μμ μ²λ¦¬
public void callGenericMethod() {
WildcardGeneric<String> wildcard = new WildcardGeneric<String>();
genericMethod(wildcard, "Data");
}
public <T extends Car> void boundedGenericMethod(WildcardGeneric<T> c, T addValue)
β³οΈ μ λ€λ¦ νμ μ΄ λ κ°μΈ λ©μλ
public <S, T extends Car> void multiGenericMethod(WildcardGeneric<T> c, T addValue, S another)
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ§λ ¬ν Serializable (0) | 2025.03.07 |
---|---|
[Java κ³ κΈνΈ] μ€λ λ μμ±κ³Ό μ€ν (0) | 2024.09.30 |
[Java] CompletableFuture λΉλκΈ° μμ (0) | 2024.05.06 |