Java中类似JSON的对象语法

Java中类似JSON的对象语法,java,class,object,constructor,instance,Java,Class,Object,Constructor,Instance,我不想问这么琐碎的问题,但我不能解决这个问题为了方便起见,我尝试创建一个基本对象,如下所示: triangle = { side: { A: 0, B: 0, C: 0 }, angle: { a, b, c }, function calcAngle(){} } 理想情况下,我只想动态创建一个通用对象。我只创建了一个“三角形”,我必须为一个实例创建一个完整的类吗?我确信这个问题在某个地方得到了回答,但我似乎无法正确回答任何有用的问题。为了让你开心,我将发布我的一些失败: pub

我不想问这么琐碎的问题,但我不能解决这个问题为了方便起见,我尝试创建一个基本对象,如下所示:

triangle = {
  side: { A: 0, B: 0, C: 0 },
  angle: { a, b, c },

  function calcAngle(){}
}
理想情况下,我只想动态创建一个通用对象。我只创建了一个“三角形”,我必须为一个实例创建一个完整的类吗?我确信这个问题在某个地方得到了回答,但我似乎无法正确回答任何有用的问题。为了让你开心,我将发布我的一些失败:

public class TGUI{

// Attempt One
   public Object triangle = new Object(){ int test; };
   public static void main(String[] args) {
     triangle.test = 1;
     // ^- Cannot make a static reference to the non-static field triangle

     triangle tri = new triangle();
     // ^- Made the compiler cry; triangle cannot be resolved to as type
   }

// Attempt Two
   public class triangle{ int test; }
   public static void main(String[] args) {
       triangle tri = new triangle();
       /* ^- No enclosing instance of TGUI is accessible.  Must qualify the allocation with an enclosing instance of type TGUI (eg x.new A() where x is an instance of TGUI) */
   }

// Attempt Three
   public void triangle(){ int test = 1; }
   public static void main(String[] args) {
     triangle tri = new triantle();
     // ^- triangle cannot be resolved to a type
   }

// Attempt Four
   public TGUI(){ int test; }
   /* I'm gonna quit here, you get the idea */
}
理想情况下,我只想动态创建一个通用对象

那么就不应该使用静态类型的语言

在Java中实现这一点的唯一方法是

  • 使用反射(不是你想要的),或者
  • 使用JSON库
  • 完全放弃打字,使用
    地图。
在您的例子中,听起来您只需要一个实际的
三角形
类。Java需要大量的输入,习惯它比编写糟糕的代码来避免它要好得多

理想情况下,我只想动态创建一个通用对象

那么就不应该使用静态类型的语言

在Java中实现这一点的唯一方法是

  • 使用反射(不是你想要的),或者
  • 使用JSON库
  • 完全放弃打字,使用
    地图。

在您的例子中,听起来您只需要一个实际的
三角形
类。Java需要大量的输入,习惯它比编写糟糕的代码来避免它要好。

尝试2更接近。您需要一个嵌套的静态类:

(或
三角形
可以在单独的文件中)


Java在其静态类型系统上的操作方式与此相去甚远。

尝试2更接近。您需要一个嵌套的静态类:

(或
三角形
可以在单独的文件中)


Java在其静态类型系统上的操作方式与此相去甚远。

事实上,您应该使用基于JVM的脚本语言(如Groovy)来实现这种开箱即用的动态操作。您将创建一个
元类的实例
,并动态添加所有字段。
好的ol'Java only的另一个选择是创建一个简单的(marker?)接口,并在需要的地方将其实现为一个
匿名内部类。

实际上,您应该使用基于JVM的脚本语言,如Groovy,来实现这种开箱即用的动态功能。您将创建一个
元类的实例
,并动态添加所有字段。
public class Triangle {
    double sideA;
    double sideB;
    double sideC;
    double[] angles = new double[3];
    double calcAngle() {
        something;
        return somethingElse;
    }
}

好的ol'Java only的另一个选项是创建一个简单的(marker?)接口,并在需要的地方将其实现为一个
匿名内部类。

您可以只使用三个
值的数组吗?您需要定义一个三角形类。一般来说,它不应该嵌套,除非你有充分的理由这样做;x、 角度b,而不是侧面[0];角度[1];我想这就是办法。所以,正确的方法是在一个单独的文件中定义一个新类,只使用一次对象?也许Map就是一种方式,你可以选择将它保留为JSON格式。您失去了能够调用其上的方法的“经典性”,但数据值仍然可以以一种相当有意义的方式访问。您是否可以只使用三个
double
值的数组?您需要定义一个三角形类。一般来说,它不应该嵌套,除非你有充分的理由这样做;x、 角度b,而不是侧面[0];角度[1];我想这就是办法。所以,正确的方法是在一个单独的文件中定义一个新类,只使用一次对象?也许Map就是一种方式,你可以选择将它保留为JSON格式。您失去了能够在其上调用方法的“经典性”,但数据值仍然可以以一种相当有意义的方式访问。
public class Triangle {
    double sideA;
    double sideB;
    double sideC;
    double[] angles = new double[3];
    double calcAngle() {
        something;
        return somethingElse;
    }
}