객체 배열에 대한 PHPDoc 유형 힌트?


417

따라서 PHPDoc @var에서는 멤버 변수 선언 위에 해당 유형을 암시하도록 지정할 수 있습니다 . 그런 다음 예를 들어 IDE. PHPEd는 어떤 유형의 객체를 사용하는지 알고 해당 변수에 대한 코드 통찰력을 제공 할 수 있습니다.

<?php
  class Test
  {
    /** @var SomeObj */
    private $someObjInstance;
  }
?>

이것은 나중에 객체를 반복 할 때 적절한 힌트를 얻을 수 있도록 객체 배열과 동일하게해야 할 때까지 효과적입니다.

멤버 변수가 SomeObjs 의 배열임을 지정하기 위해 PHPDoc 태그를 선언하는 방법이 있습니까? 예를 들어 @var배열이 충분 @var array(SomeObj)하지 않고 유효하지 않은 것 같습니다.


2
이 넷빈즈 6.8 dev에 블로그에서 일부 참조는 IDE가 배열 구성원의 유형을 추론하는 스마트 충분히 지금하는 것이있다 : blogs.sun.com/netbeansphp/entry/php_templates_improved
존 카터

3
@therefromhere : 링크가 끊어졌습니다. 새로운 URL은 다음과 같습니다. blogs.oracle.com/netbeansphp/entry/php_templates_improved
DanielaWaranie

나와 같은 사람들이 답을 찾고 검색 : PHPStorm을 사용하는 경우 가장 투표가 많은 답변을보십시오. 구체적인 힌트가 있습니다! stackoverflow.com/a/1763425/1356098 (예를 들어, PHPEd를 요구하고 있기 때문에 OP에 대한 답변이어야 함을 의미하지는 않습니다)
Erenor Paz

답변:


337

사용하다:

/* @var $objs Test[] */
foreach ($objs as $obj) {
    // Typehinting will occur after typing $obj->
}

인라인 변수를 타이핑 할 때

class A {
    /** @var Test[] */
    private $items;
}

클래스 속성.

PHPDoc (및 Zend Studio 및 Netbeans와 같은 IDE)에 해당 옵션이없는 '09의 이전 답변 :

당신이 할 수있는 최선의 방법은

foreach ($Objs as $Obj)
{
    /* @var $Obj Test */
    // You should be able to get hinting after the preceding line if you type $Obj->
}

Zend Studio에서 많이합니다. 다른 편집자에 대해 모르지만 작동해야합니다.


3
이것은 의미가 있지만 PHPEd 5.2에서는 작동하지 않습니다. 내가 일할 수 있었던 유일한 것은 foreach ($ Objs as / ** @var Test * / $ Obj)뿐입니다. :(
Artem Russakovskii

14
Netbeans 7에서는 한 가지 별표 만있는 것이 중요합니다 /** @var $Obj Test */. 작동하지 않습니다.
contrebis 2016 년

3
@contrebis : "@var"은 유효한 docblock 태그입니다. 따라서 IDE가 docblock "/ ** ... /" 내에서 지원하지 않고 "/ ... * /" 에서 "@var"만 지원하더라도 올바른 docblock을 변경하지 마십시오. IDE의 표준을 준수하도록 IDE의 버그 추적기에 문제를 제기하십시오. 개발팀 / 외부 개발자 / 커뮤니티가 서로 다른 IDE를 사용한다고 상상해보십시오. 그대로 유지하고 미래를 대비하십시오.
DanielaWaranie

181
아래를 확인하십시오! 나는 거의 아래로 스크롤하지 않았다-큰 실수 였을 것이다! !! 많은 IDE가 더 나은 구문을 지원합니다! (힌트 : @var Object[] $objects"$ objects"는 Object의 인스턴스 배열이라고합니다.)
Thom Porter

10
/** @var TYPE $variable_name */올바른 구문입니다. 모든 경우에 작동하지 않으므로 유형 및 변수 이름의 순서를 바꾸지 마십시오 (주석에서 앞서 제안한 바와 같이).
srcspider

893

JetBrains의 PhpStorm IDE에서 다음을 사용할 수 있습니다 /** @var SomeObj[] */.

/**
 * @return SomeObj[]
 */
function getSomeObjects() {...}

하는 PHPDoc 문서는 이 방법을 권장합니다 :

단일 유형을 포함하도록 지정된 경우, 유형 정의는 독자에게 각 배열 요소의 유형을 알려줍니다. 그러면 주어진 배열의 요소로 하나의 유형 만 예상됩니다.

예: @return int[]


10
방금 지난 주 동안 phpstorm을 다운로드하여 사용했습니다. 압 타나에서 자유를 얻습니다. 이것이 바로 내가 찾던 것입니다. 실제로, 그것은 당신이 JavaScript를 위해하는 것과 같은 방법입니다, 나는 추측했을 것입니다
Juan Mendes

3
고마워요! 이것이 바로 내가 찾던 것입니다. PHPStorm은 환상적입니다.
Erik Schierboom

5
Netbeans에서는 작동하지 않습니다. 실망합니다. Jetbrains는 매우 훌륭한 도구를 만듭니다.
Keyo

10
@fishbone @Keyo 이것은 임시 변수 (버그?)를 사용해야하는 것처럼 보이지만 Netbeans에서 작동합니다 (최소 7.1 야간 빌드에서는, 아마도 이전에는 가능할 수도 있습니다). 힌트는 효과 foreach(getSomeObjects() as $obj)가 없지만 효과가 있습니다$objs = getSomeObjects(); foreach($objs as $obj)
John Carter

2
@var Obj[string]연관 배열 이 있으면 좋을 것 입니다.
donquixote

59

넷빈즈 힌트 :

User 클래스 배열에 $users[0]->대한 코드 완성을 얻습니다 $this->.

/**
 * @var User[]
 */
var $users = array();

또한 클래스 멤버 목록에서 배열 유형을 볼 수 있습니다. $this->...


4
PhpStorm 9 EAP에서도 작동합니다 : / ** * @var UserInterface [] * / var $ users = []; // 인터페이스를 구현하는 Objs 배열
Ronan

NetBeans IDE 8.0.2에서 시도했지만 현재있는 클래스에서 제안을받습니다.
Wojciech Jasiński

Eclipse 4.6.3에서도 작동합니다 (idk는 어떤 버전 지원이 도입되었지만 작동하고 있으며 현재 사용중인 것입니다)
hanshenrik

불행히도 array_pop()어떤 이유로 든 유사한 기능을 사용한 후에는 작동하지 않습니다 . Netbeans는 이러한 함수가 입력 배열의 단일 요소를 반환한다는 것을 인식하지 못하는 것 같습니다.
William W

29

변수를 지정하는 것은 객체의 배열입니다 :

$needles = getAllNeedles();
/* @var $needles Needle[] */
$needles[1]->...                        //codehinting works

이것은 Netbeans 7.2에서 작동합니다 (사용하고 있습니다)

함께 작동 :

$needles = getAllNeedles();
/* @var $needles Needle[] */
foreach ($needles as $needle) {
    $needle->...                        //codehinting works
}

따라서 내부에서 선언을 사용할 foreach필요는 없습니다.


2
foreach는 여러 번 사용할 수 있으며 유형 힌트는 /* @var $Obj Test */매번 새로운 주석으로 계속 작동하기 때문에이 솔루션은 내 견해에서 허용 된 답변보다 깨끗합니다 .
Henry

여기에 두 가지 문제가 있습니다. 1. 올바른 phpdoc는 /** 2.로 시작합니다 . 올바른 형식은@var <data-type> <variable-name>
Christian

@Christian 1 : 주요 질문은 phpdoc가 아니라 typehinting 2입니다. 다른 답변에 따르면 올바른 형식은 당신이 말하는 것과 다릅니다. 사실, 나는 당신의 의견과 관련하여 두 가지 문제를 겪고 있으며, 왜 당신이 올바른 형식으로 자신의 답을
찾지 못

1. typehinting은 phpdoc에서 작동합니다 ... docblock을 사용하지 않으면 IDE는 임의의 주석으로 작성한 것을 추측하지 않습니다. 2. 다른 답변들과 마찬가지로 올바른 형식은 위에서 지정한 것입니다. 변수 이름 앞에 데이터 유형 . 3. 질문에 다른 질문이 필요하지 않기 때문에 다른 답변을 쓰지 않았으며 코드를 편집하는 것이 아닙니다.
Christian

24

PSR-5 : PHPDoc 은 제네릭 스타일 표기법을 제안합니다.

통사론

Type[]
Type<Type>
Type<Type[, Type]...>
Type<Type[|Type]...>

컬렉션의 값은 다른 배열 일 수도 있고 다른 컬렉션 일 수도 있습니다.

Type<Type<Type>>
Type<Type<Type[, Type]...>>
Type<Type<Type[|Type]...>>

<?php

$x = [new Name()];
/* @var $x Name[] */

$y = new Collection([new Name()]);
/* @var $y Collection<Name> */

$a = new Collection(); 
$a[] = new Model_User(); 
$a->resetChanges(); 
$a[0]->name = "George"; 
$a->echoChanges();
/* @var $a Collection<Model_User> */

참고 : IDE에서 코드 지원을 수행 할 것으로 예상되는 경우 IDE가 PHPDoc Generic 스타일 컬렉션 표기법을 지원하는지에 대한 또 다른 질문입니다.

이 질문에 대한 나의 대답으로부터 .


일반 표기법은 제거 PSR-5
zored

11

Robert C. Martin의 "Clean Code"에 요약 된대로 깨끗한 코드를 읽고 쓰는 것을 선호합니다. 그의 신조를 따를 때 개발자 (API 사용자)가 배열의 내부 구조를 알도록 요구해서는 안됩니다.

API 사용자는 다음과 같이 질문 할 수 있습니다. 1 차원 배열 만 있습니까? 다차원 배열의 모든 수준에서 개체가 퍼져 있습니까? 모든 객체에 액세스해야하는 중첩 루프 (foreach 등)는 몇 개입니까? 해당 배열에 어떤 유형의 객체가 "저장"됩니까?

개요를 살펴보면 객체를 포함하는 해당 배열을 1 차원 배열로 사용하려고합니다.

Nishi에서 설명한대로 다음을 사용할 수 있습니다.

/**
 * @return SomeObj[]
 */

그에 대한.

그러나 다시 한 번 명심하십시오-이것은 표준 docblock 표기법이 아닙니다. 이 표기법은 일부 IDE 제작자가 도입했습니다.

좋아, 개발자로서 "[]"가 PHP의 배열에 묶여 있다는 것을 알고있다. 그러나 일반적인 PHP 컨텍스트에서 "something []"은 무엇을 의미합니까? "[]"는 "something"내에 새 요소를 만듭니다. 새로운 요소는 모든 것이 될 수 있습니다. 그러나 당신이 표현하고자하는 것은 같은 유형과 정확한 유형의 객체 배열입니다. 보시다시피, IDE 제작자는 새로운 컨텍스트를 소개합니다. 배워야 할 새로운 맥락. 다른 PHP 개발자들이 (문서 블록을 이해하기 위해) 배워야 할 새로운 맥락. 나쁜 스타일 (!).

배열은 하나의 차원을 가지기 때문에 "객체 배열"을 "목록"이라고 부를 수 있습니다. "목록"은 다른 프로그래밍 언어에서 매우 특별한 의미를 갖습니다. 예를 들어 "컬렉션"이라고 부르는 것이 좋습니다.

기억하십시오 : OOP의 모든 옵션을 가능하게하는 프로그래밍 언어를 사용합니다. 배열 대신 클래스를 사용하고 클래스처럼 배열을 순회 가능하게 만듭니다. 예 :

class orderCollection implements ArrayIterator

또는 다차원 배열 / 개체 구조 내에서 다른 수준의 내부 개체를 저장하려는 경우 :

class orderCollection implements RecursiveArrayIterator

이 솔루션은 배열을 "orderCollection"유형의 객체로 대체하지만 IDE 내에서 코드 완성을 활성화하지는 않습니다. 괜찮아. 다음 단계:

docblock과의 인터페이스에 의해 도입되는 메소드를 구현합니다.

/**
 * [...]
 * @return Order
 */
orderCollection::current()

/**
 * [...]
 * @return integer E.g. database identifier of the order
 */
orderCollection::key()

/**
 * [...]
 * @return Order
 */
orderCollection::offsetGet()

다음에 유형 힌트를 사용하는 것을 잊지 마십시오.

orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)

이 솔루션은 다음과 같은 많은 도입을 중단합니다.

/** @var $key ... */
/** @var $value ... */

Zahymaka가 자신의 답변으로 확인한 것처럼 코드 파일 전체 (예 : 루프 내). API 사용자는 해당 docblock을 도입하여 코드를 완성하지 않아도됩니다. @return을 한 곳에서만 설정하면 중복 (@var)이 가능한 한 감소됩니다. "docBlocks with @var"을 뿌리면 코드를 읽을 수 없게됩니다.

마지막으로 당신은 끝났습니다. 힘들게 보입니까? 너트를 깨기 위해 망치를 타는 것처럼 보입니까? 그 인터페이스와 깨끗한 코드에 익숙하기 때문에 실제로는 아닙니다. 기억하십시오 : 소스 코드는 한 번 작성되고 많은 것을 읽습니다.

IDE의 코드 완성이이 방법으로 작동하지 않으면 더 나은 방법으로 전환하거나 (예 : IntelliJ IDEA, PhpStorm, Netbeans) IDE 제작자의 이슈 트래커에 기능 요청을 제출하십시오.

트레이너이자 훌륭한 자료를 가르쳐 주신 Christian Weiss (독일 출신)에게 감사합니다. 추신 : XING에서 나와 나와 만나십시오.


이것은 "올바른"방법처럼 보이지만 Netbeans에서 작동하지 않습니다. 작은 예를 들어 보자 : imgur.com/fJ9Qsro
fehrlich

2
아마도 2012 년에는 이것이 "표준이 아님"이었지만 이제는 phpDoc의 내장 기능으로 설명됩니다.
Wirone

@Wirone은 phpDocumentor가 이것을 ide 생산자에 대한 반응으로 매뉴얼에 추가하는 것처럼 보입니다. 광범위한 도구 지원이 있어도 이것이 최상의 방법임을 의미하지는 않습니다. 몇 년 전에 require, require_once, include 및 include_once와 비슷한 SomeObj []가 점점 더 많은 프로젝트에 퍼지기 시작했습니다. 자동로드시 해당 명령문의 모양이 5 % 아래로 떨어집니다. 바라건대 SomeObj []는 위의 접근 방식에 찬성하여 향후 2 년 안에 같은 비율로 떨어질 것입니다.
DanielaWaranie

1
왜 그런지 모르겠어요? 이것은 매우 간단하고 명확한 표기법입니다. SomeObj[]당신이 그것을 볼 때 그것은 2 차원 배열의 배열이라는 SomeObj것을 알게되고, 그것으로 무엇을해야하는지 알게됩니다. 나는 그것이 "깨끗한 코드"신조를 따르지 않는다고 생각합니다.
Wirone

이것이 답이되어야합니다. 와 모든 IDE 지원 방법 @return <className>에 대한 current()생각과 모든 사람. PhpStorm이 지원하므로 많은 도움이되었습니다. 고마워 친구!
Pavel

5

array[type]Zend Studio에서 사용하십시오 .

Zend Studio에서 array[MyClass]또는 array[int]심지어 array[array[MyClass]]잘 작동합니다.


5

NetBeans 7.0에서 (더 낮을 수도 있음) 리턴 유형 "array with Text objects"를 선언 @return Text하고 코드 힌트가 작동합니다.

편집 : @ Bob Fanger 제안으로 예제를 업데이트했습니다 .

/**
 * get all Tests
 *
 * @return Test|Array $tests
 */
public function getAllTexts(){
    return array(new Test(), new Test());
}

그리고 그냥 사용하십시오 :

$tests =  $controller->getAllTests();
//$tests->         //codehinting works!
//$tests[0]->      //codehinting works!

foreach($tests as $text){
    //$test->      //codehinting works!
}

완벽하지는 않지만 단지 "혼합 된"상태로 두는 것이 낫습니다.

단점은 배열을 텍스트 객체로 밟아 오류를 발생시킬 수 있다는 것입니다.


1
"@return array | Test Some description."을 사용합니다. 동일한 동작을 유발하지만 좀 더 설명이 필요합니다.
Bob Fanger

1
이것은 해결책 이 아니라 해결책입니다. 여기서 말하는 것은 "이 함수는 'Test'유형의 객체 또는 배열을 반환 할 수 있습니다." 그러나 배열에 무엇이 있는지에 대해서는 기술적으로 알려주지 않습니다.
Byson

5

DanielaWaranie 그녀의 대답에 언급 한 바와 같이 - 당신이 $ collectionObject에 $ 항목을 통해 반복 할 때 $ 항목의 유형을 지정하는 방법이있다 : 추가 @return MyEntitiesClassNamecurrent()와의 휴식 IteratorArrayAccess-methods하는 반환 값.

팔! 에서 필요 /** @var SomeObj[] $collectionObj */이상 foreach하고 잘 컬렉션 개체와 함께 작동하지, 특정 방법으로 반환 컬렉션에 필요로 설명하지@return SomeObj[] .

모든 IDE가 지원하지는 않지만 PhpStorm에서는 완벽하게 작동하므로 더 행복합니다.

예:

class MyCollection implements Countable, Iterator, ArrayAccess {

    /**
     * @return User
     */
    public function current() {
        return $this->items[$this->cursor];
    }

    //... implement rest of the required `interface` methods and your custom
}

이 답변을 게시하면 어떤 유용한 정보를 얻을 수 있었습니까

내 경우에는 current()나머지 interface방법이 구현됩니다.Abstract -collection 클래스 되며 결국 어떤 종류의 엔티티가 컬렉션에 저장되는지 알 수 없습니다.

그래서 여기 트릭이 있습니다 : 추상 클래스에서 반환 유형을 지정하지 말고 대신 PhpDoc 인스트럭션을 사용하십시오 @method 특정 컬렉션 클래스의 설명에서 .

예:

class User {

    function printLogin() {
        echo $this->login;
    }

}

abstract class MyCollection implements Countable, Iterator, ArrayAccess {

    protected $items = [];

    public function current() {
        return $this->items[$this->cursor];
    }

    //... implement rest of the required `interface` methods and your custom
    //... abstract methods which will be shared among child-classes
}

/**
 * @method User current()
 * ...rest of methods (for ArrayAccess) if needed
 */
class UserCollection extends MyCollection {

    function add(User $user) {
        $this->items[] = $user;
    }

    // User collection specific methods...

}

이제 클래스 사용법 :

$collection = new UserCollection();
$collection->add(new User(1));
$collection->add(new User(2));
$collection->add(new User(3));

foreach ($collection as $user) {
    // IDE should `recognize` method `printLogin()` here!
    $user->printLogin();
}

다시 한번 : 모든 IDE가이를 지원하지는 않지만 PhpStorm은 지원합니다. 당신을 시도하고 결과를 의견에 게시하십시오!


지금까지 그것을 바우는 바우처, 그러나 불행히도 나는 여전히 좋은 오래된 자바 제네릭 형식을 대체하기 위해 컬렉션을 전문화하도록 스스로 해결할 수 있습니다 .... yuck '
Sebas

감사합니다. 정적 메소드를 어떻게 타이핑 할 수 있습니까?
Yevgeniy Afanasyev

3

나는 파티에 늦었다는 것을 알고 있지만 최근 에이 문제를 연구하고 있습니다. 수락 된 답변은 정확하지만 정확 하지 않기 때문에 누군가 이것을 볼 수 있기를 바랍니다. 당신이 할 수있는 최선의 방법입니다. 적어도 PHPStorm에는 없지만 NetBeans는 테스트하지 않았습니다.

가장 좋은 방법은 기본 배열 유형을 사용하지 않고 ArrayIterator 클래스를 확장하는 것입니다. 이를 통해 인스턴스 수준이 아닌 클래스 수준에서 힌트를 입력 할 수 있습니다. 즉, 코드 전체가 아닌 PHPDoc에 한 번만 필요합니다 (지저분하고 DRY를 위반 할뿐만 아니라 문제가 발생할 수 있음) 리팩토링-PHPStorm은 리팩토링시 PHPDoc을 놓치는 습관이 있습니다)

아래 코드를 참조하십시오 :

class MyObj
{
    private $val;
    public function __construct($val) { $this->val = $val; }
    public function getter() { return $this->val; }
}

/**
 * @method MyObj current()
 */
class MyObjCollection extends ArrayIterator
{
    public function __construct(Array $array = [])
    {
        foreach($array as $object)
        {
            if(!is_a($object, MyObj::class))
            {
                throw new Exception('Invalid object passed to ' . __METHOD__ . ', expected type ' . MyObj::class);
            }
        }
        parent::__construct($array);
    }

    public function echoContents()
    {
        foreach($this as $key => $myObj)
        {
            echo $key . ': ' . $myObj->getter() . '<br>';
        }
    }
}

$myObjCollection = new MyObjCollection([
    new MyObj(1),
    new MyObj('foo'),
    new MyObj('blah'),
    new MyObj(23),
    new MyObj(array())
]);

$myObjCollection->echoContents();

여기서 핵심은 PHPDoc이 @method MyObj current()ArrayIterator에서 상속 된 반환 유형 ()을 재정의하는 것입니다 mixed. 이 PHPDoc의 포함은 다음을 사용하여 클래스 속성을 반복 할 때foreach($this as $myObj) 할 때 변수를 참조 할 때 코드 완성을 얻음을 의미합니다.$myObj->...

나에게 이것은 코드 전체에 흩어져있는 클래스의 인스턴스가 아닌 반복 가능한 클래스에서 반복자 유형을 선언하기 때문에 이것을 달성하는 가장 쉬운 방법입니다 (적어도 PHP는 유형 배열을 도입 할 때까지).

여기서는 ArrayIterator 확장을위한 완벽한 솔루션을 보여주지 않았으므로이 기술을 사용하면 다음을 수행 할 수도 있습니다.

  • 다음과 같은 방법에 대한 필요에 따라 다른 클래스 수준의하는 PHPDoc, 포함 offsetGet($index)next()
  • 온 전성 검사 is_a($object, MyObj::class)를 생성자에서 개인 메서드로 이동
  • 같은 방법 오버라이드 (override)에서이 (지금 개인) 전성 검사 전화 offsetSet($index, $newval)append($value)

아주 좋고 깨끗한 해결책! :)
Marko Šutija

2

문제는 @var단일 유형을 나타낼 수 있다는 것 입니다. 복잡한 수식을 포함하지 않습니다. "Farray of Foo"에 대한 구문이있는 경우, 여기서 중지하고 "2 Foo와 3 개의 Bar를 포함하는 배열의 배열"에 대한 구문을 추가하지 않는 이유는 무엇입니까? 요소 목록이 그보다 일반적 일 수는 있지만 미끄러운 경사입니다.

개인적으로, 나는 @var Foo[]"Foo 's 배열"을 나타내는 데 몇 번이나 사용 했지만 IDE에서는 지원하지 않습니다.


5
C / C ++에 대해 내가 좋아하는 것 중 하나는 실제로 유형을이 수준까지 추적한다는 것입니다. 그것은 미끄러 져 내리는 매우 즐거운 경사입니다.
화려한

2
Netbeans 7.2 (적어도 내가 사용하는 버전)에서 지원되지만 약간의 조정이 /* @var $foo Foo[] */있습니다. 그것에 대해 아래에 답변을 썼습니다. foreach(){}루프
안에서도

1
<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
    <?php
    // Type hinting now works:
    $model->getImage();
    ?>
<?php endforeach; ?>

5
어떤 IDE가 이것을 지원합니까?
philfreo 2016 년

21
이것은 매우 추한 것입니다. 이와 같이 프로그래밍을 시작할 때 코드를 깨끗하게 정리하십시오.
halfpastfour.am

오히려 배열의 내용을 정의하는 내 대답을 살펴보십시오. stackoverflow.com/a/14110784/431967
Highmastdon

-5

작동하는 것을 찾았습니다. 생명을 구할 수 있습니다!

private $userList = array();
$userList = User::fetchAll(); // now $userList is an array of User objects
foreach ($userList as $user) {
   $user instanceof User;
   echo $user->getName();
}

11
유일한 문제는 실행할 추가 코드를 도입한다는 것입니다. IDE에서만 사용됩니다. 주석 내에서 유형 힌트를 정의하는 것이 훨씬 좋습니다.
Ben Rowe

1
와우 잘 작동합니다. 추가 코드로 끝나지 만 무해한 것으로 보입니다. 다음과 같이 시작할 것입니다 : $ x instanceof Y; // typehint
Igor Nadj

3
docblock 또는 검사를 기반으로 코드 완성을 제공하는 IDE로 전환하십시오. IDE 파일을 전환하지 않으려면 IDE의 이슈 트래커에서 기능 요청을 수행하십시오.
DanielaWaranie

1
유형이 올바르지 않은 경우 예외가 발생하면 런타임 유형 점검에 유용 할 수 있습니다. 만약 ...
lilbyrdie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.