IT Share you

클래스를 확장하고 인터페이스를 구현하는 일반 클래스

shareyou 2021. 1. 10. 19:19
반응형

클래스를 확장하고 인터페이스를 구현하는 일반 클래스


클래스의 종속성을 줄이기 위해 예를 들어 일부 클래스를 확장하고 인터페이스를 구현하는 생성자에 매개 변수 (일반 클래스 사용)를 보내고 싶습니다.

public interface SomeInterface{
    public void someMethod();
}

public class MyFragment extends Fragment implements SomeInterface{
    //implementation
}

//here is classs, that I need to create. T must extend Fragment and implements 
//SomeInterface. But, I'm afraid, if I'll use MyFragment directly, it will create a
//dependence of SomeClass from MyFragment.

public class SomeClass /*generic?*/ {
    public SomeClass(T parent);
}

가능합니까?

또한 T 클래스를 사용하여 T.getActivity ()를 컨텍스트로 사용하여 뷰를 만들고 싶습니다.


T는 Fragment를 확장하고 SomeInterface를 구현해야합니다.

이 경우 SomeClass다음과 같이 선언 할 수 있습니다 .

public class SomeClass<T extends Fragment & SomeInterface>

T확장 Fragment하고 구현 하려면 유형의 개체가 필요합니다 SomeInterface.

또한 T 클래스를 사용하여 T.getActivity ()를 컨텍스트로 사용하여 뷰를 만들고 싶습니다.

나는 안드로이드에 익숙하지 않지만 만약 getActivity()선언 된 퍼블릭 인스턴스 메소드 Fragment라면 T컴파일러가 모든 Ts가 그 메소드를 상속해야한다는 것을 알기 때문에의 인스턴스에서 그것을 호출하는 것이 완전히 가능할 입니다.


이런 일을 하시겠습니까?

class SomeClass {}

interface SomeInterface{
    public void someMethod();
}

class AGenericClass<T> extends SomeClass implements SomeInterface {
    public void someMethod() {}
}

이것은 허용됩니다.

하지만 질문에 대한 Android는 무엇입니까? 제가 뭔가 빠진 것 같아서 좀 더 자세한 정보를 제공해 주 시겠어요?

아래 업데이트

나는 여전히 당신이 무엇을 하려는지 완전히 확신하지 못하며, 즉시 의존성에 대해 걱정할 필요가 있는지도 확신하지 못하지만, 이것은 또한 제한된 유형 매개 변수를 사용하여 합법적입니다 .

interface SomeInterface{
    public void someMethod();
}

class Fragment {
    public void aMethodInFragment() { }
}

public class SomeClass <T extends Fragment & SomeInterface> {
    public SomeClass(T parent) {
        parent.someMethod();
        parent.aMethodInFragment();
    }
}

type 매개 변수 는이 하위 클래스 <T extends Fragment & SomeInterface>T되어야 Fragment하고 구현 해야 함을 지정합니다 SomeInterface.


It's easy if i understand you correct you to have some type T which is extending Fragment and implementing some interface. So you have to write something like that.

abstract class TemplateFragment extends Fragment implements SomeInterface{}

and then in your classes

class SomeClass<T extends TemplateFragment> {
...
}

It will do the trick.

ReferenceURL : https://stackoverflow.com/questions/8871285/generic-class-that-extends-class-and-implements-interface

반응형