나는 제네릭을 올바르게 이해하려고 노력하고 있으며 매우 간단한 팩토리를 작성했지만이 두 경고를 처리하는 방법을 볼 수 있습니다. 주변에 좋은 촌뜨기가 있었지만, 아마도 적절한 용어로 검색하지는 않을 것입니다.) 오! 나는 단지 경고를 삼가고 싶지 않다. 나는 이것을 할 수 있어야한다고 확신한다. .간단한 공장에서 java generics 사용 - 어떻게 이러한 경고를 피할 수 있습니까?
- 유형 안전 : 생성자 simpleFactory (클래스) 원시 형 simpleFactory에 속한다. 제네릭 형식 simpleFactory에 대한 참조는 매개 변수화되어야합니다.
- simpleFactory는 원시 형식입니다. 제네릭 형식 simpleFactory에 대한 언급은
나는이 실제로 컴파일에 실패 해결하기 위해 노력했습니다 모든 구조 매개 변수가 있어야합니다 - 이것은 내가 얻을 수있는 가장 가까운 것 같다. 그것은 경고를 생성하는 ++++로 표시된 라인입니다 (Eclipse Indigo에서 안드로이드 프로젝트를 위해)
저는 훌륭한 객체 팩토리가 있다는 것을 알고 있습니다 만, 실제로 팩토리를 만드는 것이 아니라 언어를 이해하는 것입니다.)
import java.util.Stack;
public class simpleFactory<T> {
private Stack<T> cupboard;
private int allocCount;
private Class<T> thisclass;
public static simpleFactory<?> makeFactory(Class<?> facType) {
try {
facType.getConstructor();
} catch (NoSuchMethodException e) {
return null;
}
+++++ return new simpleFactory(facType);
}
private simpleFactory(Class<T> facType) {
thisclass = facType;
cupboard = new Stack<T>();
}
public T obtain() {
if (cupboard.isEmpty()) {
allocCount++;
try {
return thisclass.newInstance();
} catch (IllegalAccessException a) {
return null;
} catch (InstantiationException b) {
return null;
}
} else {
return cupboard.pop();
}
}
public void recycle(T wornout) {
cupboard.push(wornout);
}
}
분명히 이것은 cutchin이지만 닭고기와 계란입니다. makeFactory 메소드가 정적이지 않은 경우, 작업중인 팩토리 또는 null을 반환하는 이점이 느슨합니다. 나는 생성자를 public으로 만들지도 모른다. 그러나 이것은 make가 처음 호출 될 때 실패 할 수 있다는 것을 의미한다. 정적 makefactory 메소드를 사용하면 팩토리가 설정 될 때 나중의 실패의 주요 이유를 확인할 수 있기 때문에 팩토리 클라이언트가 많이있다. 획득에서 오브젝트를 다시 얻지 못할 가능성이 적습니다. – pootle
오, 죄송합니다. 정적으로 두십시오. 방금 작업 한 다른 클래스에 코드를 붙여 넣었고 해당 범위에서 정적 일 수 없습니다. 중요한 부분은입니다. –
cutchin
아! 그래도 내가 대체하면 거기에 있었 니? 정적 메서드에서 T를 사용하면 - 정적이 아닌 형식에 대한 정적 참조를 만들 수 없음 T – pootle