• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Java JCPrimitiveTypeTree类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree的典型用法代码示例。如果您正苦于以下问题:Java JCPrimitiveTypeTree类的具体用法?Java JCPrimitiveTypeTree怎么用?Java JCPrimitiveTypeTree使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



JCPrimitiveTypeTree类属于com.sun.tools.javac.tree.JCTree包,在下文中一共展示了JCPrimitiveTypeTree类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: getDefaultExpr

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
private static JCExpression getDefaultExpr(JavacTreeMaker maker, JCExpression type) {
	if (type instanceof JCPrimitiveTypeTree) {
		switch (((JCPrimitiveTypeTree) type).getPrimitiveTypeKind()) {
		case BOOLEAN:
			return maker.Literal(CTC_BOOLEAN, 0);
		case CHAR:
			return maker.Literal(CTC_CHAR, 0);
		default:
		case BYTE:
		case SHORT:
		case INT:
			return maker.Literal(CTC_INT, 0);
		case LONG:
			return maker.Literal(CTC_LONG, 0L);
		case FLOAT:
			return maker.Literal(CTC_FLOAT, 0F);
		case DOUBLE:
			return maker.Literal(CTC_DOUBLE, 0D);
		}
	}
	
	return maker.Literal(CTC_BOT, null);
	
}
 
开发者ID:git03394538,项目名称:lombok-ianchiu,代码行数:25,代码来源:HandleConstructor.java


示例2: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public void visitTypeIdent(JCPrimitiveTypeTree tree) {
	TypeTag typetag = typeTag(tree);
	try {
		if (CTC_BYTE.equals(typetag)) print ("byte");
		else if (CTC_CHAR.equals(typetag)) print ("char");
		else if (CTC_SHORT.equals(typetag)) print ("short");
		else if (CTC_INT.equals(typetag)) print ("int");
		else if (CTC_LONG.equals(typetag)) print ("long");
		else if (CTC_FLOAT.equals(typetag)) print ("float");
		else if (CTC_DOUBLE.equals(typetag)) print ("double");
		else if (CTC_BOOLEAN.equals(typetag)) print ("boolean");
		else if (CTC_VOID.equals(typetag)) print ("void");
		else print("error");
	} catch (IOException e) {
		throw new UncheckedIOException(e);
	}
}
 
开发者ID:mobmead,项目名称:EasyMPermission,代码行数:18,代码来源:PrettyCommentsPrinter.java


示例3: visit

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
@Override
public void visit(GenericTypeWrapper w) {
    JCExpression eouter = generate(w.getOuter());
    List<JCExpression> params = generate(w.getTypeParameters(),
            JCExpression.class);

    ListBuffer<JCExpression> newList = new ListBuffer<JCExpression>();
    for (JCExpression param : params) {
        JCExpression p2 = param;
        if (param.getKind() == Kind.PRIMITIVE_TYPE) {
            p2 = builder.boxPrimitiveType((JCPrimitiveTypeTree) param);
        }
        newList.append(p2);
    }

    result = builder.getTreeMaker().TypeApply(eouter, newList.toList());
}
 
开发者ID:provegard,项目名称:yield4j,代码行数:18,代码来源:JavacCodeGenerator.java


示例4: diffTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
protected int diffTypeIdent(JCPrimitiveTypeTree oldT, JCPrimitiveTypeTree newT, int[] bounds) {
    if (oldT.typetag != newT.typetag) {
        printer.print(newT);
    } else {
        copyTo(bounds[0], bounds[1]);
    }
    return bounds[1];
}
 
开发者ID:apache,项目名称:incubator-netbeans,代码行数:9,代码来源:CasualDiff.java


示例5: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
@Override public void visitTypeIdent(JCPrimitiveTypeTree tree) {
	TypeTag typeTag = typeTag(tree);
	
	if (CTC_BYTE.equals(typeTag)) print("byte");
	else if (CTC_CHAR.equals(typeTag)) print("char");
	else if (CTC_SHORT.equals(typeTag)) print("short");
	else if (CTC_INT.equals(typeTag)) print("int");
	else if (CTC_LONG.equals(typeTag)) print("long");
	else if (CTC_FLOAT.equals(typeTag)) print("float");
	else if (CTC_DOUBLE.equals(typeTag)) print("double");
	else if (CTC_BOOLEAN.equals(typeTag)) print("boolean");
	else if (CTC_VOID.equals(typeTag)) print("void");
	else print("error");
}
 
开发者ID:git03394538,项目名称:lombok-ianchiu,代码行数:15,代码来源:PrettyPrinter.java


示例6: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public void visitTypeIdent(JCPrimitiveTypeTree that) {
    try {
        print("JCPrimitiveTypeTree:");
    } catch (Exception e) {
    }
    super.visitTypeIdent(that);
}
 
开发者ID:pcgomes,项目名称:javaparser2jctree,代码行数:8,代码来源:PrintAstVisitor.java


示例7: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public void visitTypeIdent(JCPrimitiveTypeTree tree) {
    try {
        switch(tree.typetag) {
            case TypeTags.BYTE:
                print("byte");
                break;
            case TypeTags.CHAR:
                print("char");
                break;
            case TypeTags.SHORT:
                print("short");
                break;
            case TypeTags.INT:
                print("int");
                break;
            case TypeTags.LONG:
                print("long");
                break;
            case TypeTags.FLOAT:
                print("float");
                break;
            case TypeTags.DOUBLE:
                print("double");
                break;
            case TypeTags.BOOLEAN:
                print("boolean");
                break;
            case TypeTags.VOID:
                print("void");
                break;
            default:
                print("error");
                break;
        }
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}
 
开发者ID:sebastianoe,项目名称:s4j,代码行数:39,代码来源:Pretty.java


示例8: methodReturns

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public static Matcher<MethodTree> methodReturns(final Type returnType) {
  return new Matcher<MethodTree>() {
    @Override
    public boolean matches(MethodTree methodTree, VisitorState state) {
      Tree returnTree = methodTree.getReturnType();
      Type methodReturnType = null;
      if (returnTree == null) {
        // This is a constructor, it has no return type.
        return false;
      }
      switch (returnTree.getKind()) {
        case ARRAY_TYPE:
          methodReturnType = ((JCArrayTypeTree)returnTree).type;
          break;
        case PRIMITIVE_TYPE:
          methodReturnType = ((JCPrimitiveTypeTree)returnTree).type;
          break;
        case PARAMETERIZED_TYPE:
          methodReturnType = ((JCTypeApply)returnTree).type;
          break;
        default:
          return false;
      }
      return state.getTypes().isSameType(methodReturnType, returnType);
    }
  };
}
 
开发者ID:diy1,项目名称:error-prone-aspirator,代码行数:28,代码来源:Matchers.java


示例9: TypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public JCPrimitiveTypeTree TypeIdent(TypeTag typetag) {
	return invoke(TypeIdent, typetag.value);
}
 
开发者ID:git03394538,项目名称:lombok-ianchiu,代码行数:4,代码来源:JavacTreeMaker.java


示例10: createToString

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
static JCMethodDecl createToString(JavacNode typeNode, Collection<JavacNode> fields, boolean includeFieldNames, boolean callSuper, FieldAccess fieldAccess, JCTree source) {
	JavacTreeMaker maker = typeNode.getTreeMaker();
	
	JCAnnotation overrideAnnotation = maker.Annotation(genJavaLangTypeRef(typeNode, "Override"), List.<JCExpression>nil());
	JCModifiers mods = maker.Modifiers(Flags.PUBLIC, List.of(overrideAnnotation));
	JCExpression returnType = genJavaLangTypeRef(typeNode, "String");
	
	boolean first = true;
	
	String typeName = getTypeName(typeNode);
	String infix = ", ";
	String suffix = ")";
	String prefix;
	if (callSuper) {
		prefix = typeName + "(super=";
	} else if (fields.isEmpty()) {
		prefix = typeName + "()";
	} else if (includeFieldNames) {
		prefix = typeName + "(" + ((JCVariableDecl)fields.iterator().next().get()).name.toString() + "=";
	} else {
		prefix = typeName + "(";
	}
	
	JCExpression current = maker.Literal(prefix);
	
	if (callSuper) {
		JCMethodInvocation callToSuper = maker.Apply(List.<JCExpression>nil(),
				maker.Select(maker.Ident(typeNode.toName("super")), typeNode.toName("toString")),
				List.<JCExpression>nil());
		current = maker.Binary(CTC_PLUS, current, callToSuper);
		first = false;
	}
	
	for (JavacNode fieldNode : fields) {
		JCExpression expr;
		
		JCExpression fieldAccessor = createFieldAccessor(maker, fieldNode, fieldAccess);
		
		JCExpression fieldType = getFieldType(fieldNode, fieldAccess);
		
		// The distinction between primitive and object will be useful if we ever add a 'hideNulls' option.
		boolean fieldIsPrimitive = fieldType instanceof JCPrimitiveTypeTree;
		boolean fieldIsPrimitiveArray = fieldType instanceof JCArrayTypeTree && ((JCArrayTypeTree) fieldType).elemtype instanceof JCPrimitiveTypeTree;
		boolean fieldIsObjectArray = !fieldIsPrimitiveArray && fieldType instanceof JCArrayTypeTree;
		@SuppressWarnings("unused")
		boolean fieldIsObject = !fieldIsPrimitive && !fieldIsPrimitiveArray && !fieldIsObjectArray;
		
		if (fieldIsPrimitiveArray || fieldIsObjectArray) {
			JCExpression tsMethod = chainDots(typeNode, "java", "util", "Arrays", fieldIsObjectArray ? "deepToString" : "toString");
			expr = maker.Apply(List.<JCExpression>nil(), tsMethod, List.<JCExpression>of(fieldAccessor));
		} else expr = fieldAccessor;
		
		if (first) {
			current = maker.Binary(CTC_PLUS, current, expr);
			first = false;
			continue;
		}
		
		if (includeFieldNames) {
			current = maker.Binary(CTC_PLUS, current, maker.Literal(infix + fieldNode.getName() + "="));
		} else {
			current = maker.Binary(CTC_PLUS, current, maker.Literal(infix));
		}
		
		current = maker.Binary(CTC_PLUS, current, expr);
	}
	
	if (!first) current = maker.Binary(CTC_PLUS, current, maker.Literal(suffix));
	
	JCStatement returnStatement = maker.Return(current);
	
	JCBlock body = maker.Block(0, List.of(returnStatement));
	
	return recursiveSetGeneratedBy(maker.MethodDef(mods, typeNode.toName("toString"), returnType,
			List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null), source, typeNode.getContext());
}
 
开发者ID:git03394538,项目名称:lombok-ianchiu,代码行数:77,代码来源:HandleToString.java


示例11: cloneType0

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
private static JCExpression cloneType0(JavacTreeMaker maker, JCTree in) {
	if (in == null) return null;
	
	if (in instanceof JCPrimitiveTypeTree) return (JCExpression) in;
	
	if (in instanceof JCIdent) {
		return maker.Ident(((JCIdent) in).name);
	}
	
	if (in instanceof JCFieldAccess) {
		JCFieldAccess fa = (JCFieldAccess) in;
		return maker.Select(cloneType0(maker, fa.selected), fa.name);
	}
	
	if (in instanceof JCArrayTypeTree) {
		JCArrayTypeTree att = (JCArrayTypeTree) in;
		return maker.TypeArray(cloneType0(maker, att.elemtype));
	}
	
	if (in instanceof JCTypeApply) {
		JCTypeApply ta = (JCTypeApply) in;
		ListBuffer<JCExpression> lb = new ListBuffer<JCExpression>();
		for (JCExpression typeArg : ta.arguments) {
			lb.append(cloneType0(maker, typeArg));
		}
		return maker.TypeApply(cloneType0(maker, ta.clazz), lb.toList());
	}
	
	if (in instanceof JCWildcard) {
		JCWildcard w = (JCWildcard) in;
		JCExpression newInner = cloneType0(maker, w.inner);
		TypeBoundKind newKind;
		switch (w.getKind()) {
		case SUPER_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.SUPER);
			break;
		case EXTENDS_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.EXTENDS);
			break;
		default:
		case UNBOUNDED_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.UNBOUND);
			break;
		}
		return maker.Wildcard(newKind, newInner);
	}
	
	// This is somewhat unsafe, but it's better than outright throwing an exception here. Returning null will just cause an exception down the pipeline.
	return (JCExpression) in;
}
 
开发者ID:git03394538,项目名称:lombok-ianchiu,代码行数:51,代码来源:JavacHandlerUtil.java


示例12: AJCPrimitiveTypeTree

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public AJCPrimitiveTypeTree(JCPrimitiveTypeTree ltree) {
    super(ltree.typetag);
}
 
开发者ID:pcgomes,项目名称:javaparser2jctree,代码行数:4,代码来源:AJCPrimitiveTypeTree.java


示例13: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
@Override public void visitTypeIdent(JCPrimitiveTypeTree tree) {
	printNode(tree);
	property("typetag", literalName(tree.typetag));
	indent--;
}
 
开发者ID:evant,项目名称:android-retrolambda-lombok,代码行数:6,代码来源:JcTreePrinter.java


示例14: visitPrimitiveType

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
@Override
public UPrimitiveTypeTree visitPrimitiveType(PrimitiveTypeTree tree, Void v) {
  return UPrimitiveTypeTree.create(((JCPrimitiveTypeTree) tree).typetag);
}
 
开发者ID:google,项目名称:error-prone,代码行数:5,代码来源:UTemplater.java


示例15: basicType

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
/** BasicType = BYTE | SHORT | CHAR | INT | LONG | FLOAT | DOUBLE | BOOLEAN
 */
JCPrimitiveTypeTree basicType() {
    JCPrimitiveTypeTree t = to(F.at(S.pos()).TypeIdent(typetag(S.token())));
    S.nextToken();
    return t;
}
 
开发者ID:sebastianoe,项目名称:s4j,代码行数:8,代码来源:JavacParser.java


示例16: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public void visitTypeIdent(JCPrimitiveTypeTree tree) {
    result = check(tree, syms.typeOfTag[tree.typetag], TYP, pkind, pt);
}
 
开发者ID:sebastianoe,项目名称:s4j,代码行数:4,代码来源:Attr.java


示例17: createToString

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
private JCMethodDecl createToString(JavacNode typeNode, List<JavacNode> fields, boolean includeFieldNames, boolean callSuper, FieldAccess fieldAccess, JCTree source) {
	TreeMaker maker = typeNode.getTreeMaker();
	
	JCAnnotation overrideAnnotation = maker.Annotation(chainDots(typeNode, "java", "lang", "Override"), List.<JCExpression>nil());
	JCModifiers mods = maker.Modifiers(Flags.PUBLIC, List.of(overrideAnnotation));
	JCExpression returnType = chainDots(typeNode, "java", "lang", "String");
	
	boolean first = true;
	
	String typeName = getTypeName(typeNode);
	String infix = ", ";
	String suffix = ")";
	String prefix;
	if (callSuper) {
		prefix = typeName + "(super=";
	} else if (fields.isEmpty()) {
		prefix = typeName + "()";
	} else if (includeFieldNames) {
		prefix = typeName + "(" + ((JCVariableDecl)fields.iterator().next().get()).name.toString() + "=";
	} else {
		prefix = typeName + "(";
	}
	
	JCExpression current = maker.Literal(prefix);
	
	if (callSuper) {
		JCMethodInvocation callToSuper = maker.Apply(List.<JCExpression>nil(),
				maker.Select(maker.Ident(typeNode.toName("super")), typeNode.toName("toString")),
				List.<JCExpression>nil());
		current = maker.Binary(CTC_PLUS, current, callToSuper);
		first = false;
	}
	
	for (JavacNode fieldNode : fields) {
		JCExpression expr;
		
		JCExpression fieldAccessor = createFieldAccessor(maker, fieldNode, fieldAccess);
		
		JCExpression fieldType = getFieldType(fieldNode, fieldAccess);
		
		// The distinction between primitive and object will be useful if we ever add a 'hideNulls' option.
		boolean fieldIsPrimitive = fieldType instanceof JCPrimitiveTypeTree;
		boolean fieldIsPrimitiveArray = fieldType instanceof JCArrayTypeTree && ((JCArrayTypeTree) fieldType).elemtype instanceof JCPrimitiveTypeTree;
		boolean fieldIsObjectArray = !fieldIsPrimitiveArray && fieldType instanceof JCArrayTypeTree;
		@SuppressWarnings("unused")
		boolean fieldIsObject = !fieldIsPrimitive && !fieldIsPrimitiveArray && !fieldIsObjectArray;
		
		if (fieldIsPrimitiveArray || fieldIsObjectArray) {
			JCExpression tsMethod = chainDots(typeNode, "java", "util", "Arrays", fieldIsObjectArray ? "deepToString" : "toString");
			expr = maker.Apply(List.<JCExpression>nil(), tsMethod, List.<JCExpression>of(fieldAccessor));
		} else expr = fieldAccessor;
		
		if (first) {
			current = maker.Binary(CTC_PLUS, current, expr);
			first = false;
			continue;
		}
		
		if (includeFieldNames) {
			current = maker.Binary(CTC_PLUS, current, maker.Literal(infix + fieldNode.getName() + "="));
		} else {
			current = maker.Binary(CTC_PLUS, current, maker.Literal(infix));
		}
		
		current = maker.Binary(CTC_PLUS, current, expr);
	}
	
	if (!first) current = maker.Binary(CTC_PLUS, current, maker.Literal(suffix));
	
	JCStatement returnStatement = maker.Return(current);
	
	JCBlock body = maker.Block(0, List.of(returnStatement));
	
	return recursiveSetGeneratedBy(maker.MethodDef(mods, typeNode.toName("toString"), returnType,
			List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null), source);
}
 
开发者ID:redundent,项目名称:lombok,代码行数:77,代码来源:HandleToString.java


示例18: cloneType0

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
private static JCExpression cloneType0(TreeMaker maker, JCTree in) {
	if (in == null) return null;
	
	if (in instanceof JCPrimitiveTypeTree) return (JCExpression) in;
	
	if (in instanceof JCIdent) {
		return maker.Ident(((JCIdent) in).name);
	}
	
	if (in instanceof JCFieldAccess) {
		JCFieldAccess fa = (JCFieldAccess) in;
		return maker.Select(cloneType0(maker, fa.selected), fa.name);
	}
	
	if (in instanceof JCArrayTypeTree) {
		JCArrayTypeTree att = (JCArrayTypeTree) in;
		return maker.TypeArray(cloneType0(maker, att.elemtype));
	}
	
	if (in instanceof JCTypeApply) {
		JCTypeApply ta = (JCTypeApply) in;
		ListBuffer<JCExpression> lb = ListBuffer.lb();
		for (JCExpression typeArg : ta.arguments) {
			lb.append(cloneType0(maker, typeArg));
		}
		return maker.TypeApply(cloneType0(maker, ta.clazz), lb.toList());
	}
	
	if (in instanceof JCWildcard) {
		JCWildcard w = (JCWildcard) in;
		JCExpression newInner = cloneType0(maker, w.inner);
		TypeBoundKind newKind;
		switch (w.getKind()) {
		case SUPER_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.SUPER);
			break;
		case EXTENDS_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.EXTENDS);
			break;
		default:
		case UNBOUNDED_WILDCARD:
			newKind = maker.TypeBoundKind(BoundKind.UNBOUND);
			break;
		}
		return maker.Wildcard(newKind, newInner);
	}
	
	// This is somewhat unsafe, but it's better than outright throwing an exception here. Returning null will just cause an exception down the pipeline.
	return (JCExpression) in;
}
 
开发者ID:redundent,项目名称:lombok,代码行数:51,代码来源:JavacHandlerUtil.java


示例19: boxPrimitiveType

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
public JCExpression boxPrimitiveType(JCPrimitiveTypeTree primitiveType) {
    Name n = syms.boxedName[primitiveType.typetag];
    return maker.Ident(reader.enterClass(n));
}
 
开发者ID:provegard,项目名称:yield4j,代码行数:5,代码来源:TreeBuilder.java


示例20: visitTypeIdent

import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree; //导入依赖的package包/类
@Override public void visitTypeIdent(JCPrimitiveTypeTree node) {
	String primitiveType = JcTreeBuilder.PRIMITIVES.inverse().get(node.typetag);
	
	if (primitiveType == null) throw new IllegalArgumentException("Uknown primitive type tag: " + node.typetag);
	
	TypeReferencePart part = setPos(node, new TypeReferencePart().astIdentifier(setPos(node, new Identifier().astValue(primitiveType))));
	
	set(node, new TypeReference().astParts().addToEnd(part));
}
 
开发者ID:evant,项目名称:android-retrolambda-lombok,代码行数:10,代码来源:JcTreeConverter.java



注:本文中的com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java QueryEnumerator类代码示例发布时间:2022-05-22
下一篇:
Java HLogRecordReader类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap