다음과 같은 Java 메소드:public static <F는 Field<F>> DenseVector<F> valueOf(F… 요소)…이게 무엇인가요?
문제
그래서 여기 누군가가 Java에서 벡터(수학적인 것)를 얻기 위해 나에게 Java 라이브러리(JScience)를 지적한 후 Java 라이브러리(JScience)를 살펴보고 있습니다.
불행하게도 저는 살면서 다음과 같은 것을 본 적이 없습니다.
public static <F extends Field<F>> DenseVector<F> valueOf(F... elements)
DenseVector 클래스에서 호출할 수 있는 메서드입니다.무슨...그게 무슨 뜻인가요?"를 반환합니까?<F extends Field<F>>
" (그렇다면 Eclipse는 왜 그것이 입력이라고 생각하는가?)
http://jscience.org/api/org/jscience/mathematics/Vector/DenseVector.html#valueOf(F...)
정말 혼란 스럽습니다.나는 만들 수 없습니다 new DenseVector()
왜냐하면 슈퍼 클래스만이 그것을 갖고 있고 보호되어 있기 때문입니다. DenseVector.valueOf()
분명히 내가 입력할 때만 작동하는 것 같은데...그...이상한 것을 입력으로 주면 됩니다.
사람들이 객체(또는 그와 유사한 것)를 인스턴스화하려고 할 때 메소드를 인스턴스화해야 하는 것을 본 적이 있습니다. 그런 것입니까(또는 그런 것입니까?)) API는 무엇을 하도록 하려고 합니까?
저는 학교에서 Java를 배웠고(직장에서도 약간 사용했지만 Java 외에 다른 것들을 많이 사용했지만) 이와 같은 것을 본 적이 없다는 사실이 다소 혼란스럽습니다.그것은 무엇입니까?나에게 무엇을 시키려고 하는 걸까요?새로운 것인가요?오래된?모호?
-제니
해결책
이 방법을 호출하여 다음과 같은 벡터를 만들 수 있어야합니다.
Real r1 = Real.ONE, r2 = Real.valueOf(2D), r3 = Real.ZERO;
DenseVector<Real> v = valueOf(r1, r2, r3);
이 예에서는 유형 인수입니다 F
~이다 Real
. Real
제약 조건을 순종합니다 "extends Field<F>
"그것을 구현하기 때문입니다 Field<Real>
.
다른 응용 프로그램의 경우 다른 필드 사용될 가능성이 높습니다. 예를 들어 보안 응용 프로그램은 다음을 사용할 수 있습니다 ModuloInteger
필드. 이것은 물리학에서 이야기하는 것처럼 "벡터 필드"가 아니라 수학적 필드이기 때문에 약간 혼란 스럽습니다.
이 라이브러리는 유형 변수를 사용하여 주어진 필드 내에서 모든 작업을 수행 할 수 있도록 도와줍니다. 예를 들어, 주어진 v
a로 선언되었습니다 DenseVector<Real>
위에서와 마찬가지로 컴파일러는 당신이 그것을 Complex
숫자.
다른 팁
일반적인 반환 유형입니다. 보다 여기 Java Generics에 대한 튜토리얼.
이것을 일반 유형이라고합니다. Java 5에 추가되었으며 C ++ 템플릿과 유사합니다.
아이디어는 일반적인 것이 아니라 특정 유형의 항목 모음을 정의한다는 것입니다.
이것은 빈번한 다운 캐스팅을 피하는 데 도움이됩니다. 구형 Java 코드에서는 벡터에 x 만 포함되어 있다는 것을 알고 있다고 가정합니다. 해당 컬렉션에서 항목을 검색 한 후에는 객체를 얻고 명시 적으로 다운 캐스트해야했습니다.
YS를 XS의 벡터에 넣을 수없고 같은 이유로 읽기가 더 명확하기 때문에 더 안전합니다.
이 괄호에서 "확장"의 비하인드 스토리는 여전히 x의 하위 유형을 받아들이지 만 Y를 거부하는 "xs와 그 하위 유형의 모든 하위 유형"의 컬렉션을 정의 할 수 있다는 것입니다.
public static <F extends Field<F>> DenseVector<F> valueOf(F... elements)
이것을 분석해보자:
public static
공개 정적 방법입니다.
<F extends Field<F>>
F가 Field의 확장인 모든 클래스 F에 대한 일반적인 메서드입니다.
DenseVector<F>
F에 대한 (일반) DenseVector를 반환합니다.
valueOf(F... elements)
매개변수가 0개 이상의 F인 valueOf라는 메소드.