다음과 같은 Java 메소드:public static <F는 Field<F>> DenseVector<F> valueOf(F… 요소)…이게 무엇인가요?

StackOverflow https://stackoverflow.com/questions/1633211

  •  06-07-2019
  •  | 
  •  

문제

그래서 여기 누군가가 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라는 메소드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top