2010-06-05 6 views
0

나는 일반 datacontainer를 구축했으며 이제는 해당 유형에 따라 데이터를 조작하려고합니다. 그러나, 호환되지 않는 유형의 경고가 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?자바 제네릭 변환

Type _Value; 
public void set(Type t) throws Exception { 
    if (_Value instanceof Integer 
    && t instanceof Integer) { 
     _Value = (((Integer) t 
     - _MinValue + getRange()) 
      % getRange()) + _MinValue; 
     } 
     else if (_Value instanceof Boolean 
     && t instanceof Boolean) { 
_Value = t; 
      } 
     else throw new Exception("Invalid type"); 
    } 
+0

클래스가 정의되는 방법과 인스턴스가 생성되는 방법을 보여줍니다. –

답변

2

당신은 Sun Java 코딩 표준을 따르지 않습니다. 변수 이름은 소문자로 시작해야합니다. 내 개인적인 취향은 그 선두의 밑줄도 잃어 버릴 것입니다. 변수가 클래스 멤버임을 철자해야하는 경우 "this"를 사용하십시오. IDE는이를 표시 할만큼 똑똑합니다. 선행 밑줄이있는 클래스 멤버 변수를 나타내는 고대 C++ 규칙은 텍스트를 강조 표시 할 수없는 텍스트 편집기 인 경우 좋은 아이디어 일 수 있지만 오늘날에는 그렇지 않습니다.

"instanceof"구문은 모든 객체 지향 원칙에 위배됩니다.

형식 자체에 종속 된 작업을 컨테이너 자체에 포함시킬 수 없습니다. 내 조언은 컨테이너를 작성하고 포함 된 항목의 조작을 Iterator, Functor 또는 Visitor로 구체화하는 것입니다. generic 형식을 사용하여 "instanceof"에 의지하지 않고 형식을 지정할 수 있습니다.

더 깨끗한 디자인입니다. "instanceof"가없고 적절한 관심사가 분리됩니다.

0

Type이 java.reflect.Type 인 경우 Integer 또는 Boolean이 될 수 없습니다. 이것은 유형, 클래스, 인터페이스에 대한 정보를 보유하고있는 객체를위한 인터페이스 일 뿐이며 실제로는 해당 유형, 클래스, 인터페이스의 객체가 아닙니다. 그리고 당신은 경고가 아니라 오류를 가져야합니다. 어쩌면 Type 대신 Object를 사용해야하거나, 반사적으로 어떤 것을하려고합니까?