考虑以下Enum类:
public enum APlanet {
VENUS () {public void stuff(){}},
EARTH () {public void stuff(){}},
MARS () {public void stuff(){}};
public abstract void stuff();
}
public enum BPlanet {
VENUS (),
EARTH (),
MARS ();
}
Run Code Online (Sandbox Code Playgroud)
然后APlanet.MARS.getClass().isEnum()返回false,然后BPlanet.MARS.getClass().isEnum()返回true.为什么?请注意,APlanet.getDeclaringClass().isEnum()正确返回true.
具体来说,我正在尝试可靠地测试对象是否为枚举:
Object a = APlanet.MARS;
Object b = BPlanet.MARS;
a.getClass().isEnum() /* returns false */
b.getClass().isEnum() /* returns true */
Run Code Online (Sandbox Code Playgroud)
然而
Enum.class.isAssignableFrom(a.getClass()); /* returns true */
Run Code Online (Sandbox Code Playgroud)
内部类APlanet.MARS不是Enum但是你可以将它分配给枚举,这有点令人困惑,如:
Enum<?> m = APlanet.MARS;
Run Code Online (Sandbox Code Playgroud) 我去采访了.采访者问我是否可以实例化一个接口和抽象类?据我所知,我说"不".但他说"是的,我们可以借助匿名课程".
你能告诉我怎么样吗?
我有一个关于抽象类的问题.
首先......我正在使用谷歌翻译,对不起:(我希望你理解.
如果无法实例化抽象类,那么这段代码是什么:
public class Ppal {
public void start(){
ABS clsAbs = new ABS() {
@Override
public void absMetod() {
}
};
clsAbs.metod();
}
}
Run Code Online (Sandbox Code Playgroud)
ABS:
public abstract class ABS{
public void metod(){}
public abstract void absMetod();
}
Run Code Online (Sandbox Code Playgroud)
ABS clsAbs = new ABS () {...这不是一个例子吗?可以使用clsAbs并且不能使用抽象类,只能创建抽象模型......
它可以用作匿名类,但这(ABS clsAbs = new ABS () {...)不是匿名的.
非常感谢你提前!
我正在关注一个有不同状态要处理的java游戏编程教程.现在我们只是没有对它们做任何事情,只是在我们的主类中实例化它们.定义状态的超类如下:
package com.arjav.tilegame.states;
import java.awt.Graphics;
import com.arjav.tilegame.Game;
public abstract class State {
protected Game game ;
private static State currentState = null ;
public State(Game game) {
this.game = game ;
}
public static void setState(State state){
currentState = state ;
}
public static State getState(){
return currentState ;
}
public abstract void tick();
public abstract void render(Graphics g);
}
Run Code Online (Sandbox Code Playgroud)
我遇到问题的主要课程:
package com.arjav.tilegame;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import com.arjav.tilegame.display.Display;
import com.arjav.tilegame.gfx.Assets;
import com.arjav.tilegame.states.GameState;
import com.arjav.tilegame.states.MenuState;
import com.arjav.tilegame.states.State;
public class Game …Run Code Online (Sandbox Code Playgroud) 我知道创建抽象类背后的概念用法,即为其子类定义一个公共接口,其中一些实现留给各个子类.
我是否正确地假设技术上没有必要抽象类,因为你可以覆盖超类方法?是否创建了抽象类以使类的意图更清晰?
我的意思是:
// Using an abstract class
abstract class Car
{
int fuel;
int getFuel()
{
return this.fuel;
}
abstract String getColor();
}
class RedCar extends Car
{
String getColor()
{
return "red";
}
}
// Without an abstract class
class Car
{
int fuel;
int getFuel()
{
return this.fuel;
}
String getColor()
{
return "defaultColor";
}
class RedCar extends Car
{
String getColor()
{
return "red";
}
}
Run Code Online (Sandbox Code Playgroud) 扩展命令管理器.cs
var assembly = AppDomain.CurrentDomain.GetAssemblies();
var types = assembly.SelectMany(s => s.GetTypes()).Where(p => typeof(ICommand).IsAssignableFrom(p));
foreach (var type in types)
{
source.Commands.Add((ICommand) Activator.CreateInstance(type));
}
return source;
Run Code Online (Sandbox Code Playgroud)
类型继承ICcommand 但是为什么会出现错误呢?
错误
Unhandled exception. System.MissingMethodException: Cannot create an abstract class.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& hasNoDefaultCtor)
at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type)
at BASE.CommandControllers.ExtendedCommandManager.Load[T](T source) in D:\CLang\DicordProject\Discord\BASE\CommandControllers\ExtendedCommandManager.cs:line 16
Run Code Online (Sandbox Code Playgroud)