자바의 메소드 범위 내에서 유형 변수를 도입 할 수 있는지 궁금합니다. 즉, 메소드 본문 내에서 범위를 제한합니다.Java에서 범위가 제한된 유형 변수
그러나 추상적 인 문제를 설명하려고 시도하는 것이 아니라 구체적인 문제를 설명합니다.
public class Settings {
public static abstract class Setting<T> {
public T value;
public abstract T fallbackvalue();
}
private final List<Setting<?>> settings;
}
내가 지금은 추상적 인 방법에 의해 제공되는 그들의 대체 값으로 모든 설정 값을 설정, Settings
에서, 함수를 작성하려면 : 나는 조금 같이 클래스의 몇 가지있다. 내 첫 번째 생각은 이렇게 할 것입니다 :
public void reset() {
for(Setting<?> setting : settings)
setting.value = setting.fallbackvalue();
}
그러나 두 번째 생각에서 이것이 작동하지 않는 이유는 분명합니다. setting.value에 대한 <?>
의 캡처는 setting.fallbackvalue()
의 캡처와 다릅니다. 어거, 캡처를 통합하는 방법이 필요해. 그것은 다음과 같이 그것을 해결하기 위해 수이다
private static <T> void reset1(Setting<T> s) {
s.value = setting.fallbackvalue();
}
public void reset() {
for(Setting<?> setting : settings)
reset1(setting);
}
명시 적 유형 변수 reset1
에 대한 <T>
편리하게 캡처를 통합,하지만 분명히 네임 스페이스를,이 기능을 소개하는 오염 수있는 세계에서 가장 추악한 일이의 난장판 형식 시스템을 만족시키기 위해 코드를 쉽게 읽을 수 없게 만듭니다.
reset
의 본문 내에서이를 수행 할 방법이 없습니까?
public void reset() {
for(Setting<?> setting : settings) {
<T> {
Setting<T> foo = setting;
foo.value = foo.fallbackvalue();
}
}
}
그것은 세계에서 가장 예쁜 것은 아니지만, 적어도 내 눈이 훨씬 덜 strainful 위의 변형보다 : 내가 뭘하려는 것은 단순히이 같은 것입니다. 아아, 불가능합니다. 그러나 가능한 무엇이, 그 후에?
나는 당신이 옳다는 것을 인정해야 할 것이 두렵습니다. 문제를 해결하기위한 일반적인 방법으로 일반적으로 "reset1"방법을 제안하는 것 같습니다. 유감 이네요. – Dolda2000