엔클로징 클래스 Java가 아닙니다.
테트리스 게임을 만들려고 하는데 컴파일러 오류가 발생해요.
Shape is not an enclosing class
오브젝트를 작성하려고 하면
public class Test {
public static void main(String[] args) {
Shape s = new Shapes.ZShape();
}
}
각 모양마다 내부 클래스를 사용하고 있습니다.여기 내 코드의 일부가 있다.
public class Shapes {
class AShape {
}
class ZShape {
}
}
내가 뭘 잘못하고 있지?
ZShape
는 스태틱하지 않기 때문에 외부 클래스의 인스턴스가 필요합니다.
및 「ZShape」를 만드는 입니다.static
네가 할 수 있으면.
.final
★★★★★★★★★★★★★★★★★」static final
네, 그렇습니다.
Retailer Profile Model이 메인 클래스이고 Retailer Payment Model이 내부 클래스라고 가정합니다.다음과 같이 클래스 외부에 내부 클래스의 개체를 만들 수 있습니다.
RetailerProfileModel.RetailerPaymentModel paymentModel
= new RetailerProfileModel().new RetailerPaymentModel();
이 경우 내부 클래스는 외부 클래스의 비 정적 멤버에 액세스할 수 없기 때문에 비 정적 클래스를 정적 클래스로 변환하지 않는 것이 좋습니다.
예:
class Outer
{
class Inner
{
//...
}
}
이 경우 다음과 같은 작업을 수행할 수 있습니다.
Outer o = new Outer();
Outer.Inner obj = o.new Inner();
문서에 기재된 바와 같이:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
부모 클래스의 일부 글로벌 변수에 의존하기 때문에 스태틱할 수 없는 내부 클래스의 새 인스턴스를 만들어야 할 수 있습니다., 「」가 .not an enclosing class
에러가 발생.
, '만약에'가 '만약에'?ZShape
수 .Shape
수업?
새로운 수 요?ZShape
음음음같 뭇매하다
부모 클래스에 getter를 추가합니다.
public ZShape getNewZShape() {
return new ZShape();
}
다음과 같이 액세스합니다.
Shape ss = new Shape();
ZShape s = ss.getNewZShape();
Shape shape = new Shape();
Shape.ZShape zshape = shape.new ZShape();
저도 같은 문제를 겪었습니다.저는 모든 내부 퍼블릭 클래스에 대해 인스턴스를 생성하여 해결했습니다만, 당신의 상황에 대해서는 내부 클래스 이외의 상속을 사용하는 것이 좋습니다.
public class Shape {
private String shape;
public ZShape zShpae;
public SShape sShape;
public Shape(){
int[][] coords = noShapeCoords;
shape = "NoShape";
zShape = new ZShape();
sShape = new SShape();
}
class ZShape{
int[][] coords = zShapeCoords;
String shape = "ZShape";
}
class SShape{
int[][] coords = sShapeCoords;
String shape = "SShape";
}
//etc
}
그런 다음 새로운 Shape()를 사용하여 ZShape를 방문할 수 있습니다.zShape;
중첩된 클래스를 정적으로 만들 필요는 없지만 공개해야 합니다.
public class Test {
public static void main(String[] args) {
Shape shape = new Shape();
Shape s = shape.new Shape.ZShape();
}
}
합격된 답을 읽을 때 내가 처음에 깨닫지 못한 것은 내부 클래스를 정적으로 만드는 것은 기본적으로 다른 클래스로 이동하는 것과 같다는 것이다.
따라서 오류가 발생했을 때
xxx가 포함된 클래스가 아닙니다.
이 문제는 다음 방법 중 하나로 해결할 수 있습니다.
- , 그럼 여기에다가 더해져요.
static
클래스의 또는 inner 클래스의 키워드 - 다른 클래스로 이동합니다.
부모 클래스가 싱글톤인 경우 다음 방법을 사용합니다.
Parent.Child childObject = (Parent.getInstance()).new Child();
서 ''는getInstance()
는 부모 클래스의 싱글톤 개체를 반환합니다.
질문의 요건을 충족하기 위해 클래스를 인터페이스에 넣을 수 있습니다.
public interface Shapes {
class AShape{
}
class ZShape{
}
}
그런 다음 이전에 시도한 작성자로 사용합니다.
public class Test {
public static void main(String[] args) {
Shape s = new Shapes.ZShape();
}
}
에는'논리적인해법'을.fabric
패턴
언급URL : https://stackoverflow.com/questions/20252727/is-not-an-enclosing-class-java
'sourcecode' 카테고리의 다른 글
Nuxtjs 구성 요소의 비동기 데이터가 작동하지 않습니다. (0) | 2022.08.19 |
---|---|
Vue.js, 다른 경로의 컴포넌트에 데이터 전달 (0) | 2022.08.19 |
Java에서 범용 어레이를 작성하는 방법 (0) | 2022.08.19 |
Kotlin에서 "Activity.this"에 액세스하는 방법 (0) | 2022.08.19 |
Vue를 사용한 검색 상자 및 확인란 필터 (0) | 2022.08.19 |