如果您想了解对同一类中的多个字段使用@Id的相关知识,那么本文是一篇不可错过的文章,我们将对同一字段可以存放不同类型的数据进行全面详尽的解释,并且为您提供关于c#–同一类中的单元测试(带条件编译)?、
如果您想了解对同一类中的多个字段使用@Id的相关知识,那么本文是一篇不可错过的文章,我们将对同一字段可以存放不同类型的数据进行全面详尽的解释,并且为您提供关于c# – 同一类中的单元测试(带条件编译)?、c# – 对同一类型的多个参数进行编译时方法调用验证、Flutter - 对同一个 JSON 的多个 HTTP 请求、Java 访问同一类中另一个对象的私有字段的有价值的信息。
本文目录一览:- 对同一类中的多个字段使用@Id(同一字段可以存放不同类型的数据)
- c# – 同一类中的单元测试(带条件编译)?
- c# – 对同一类型的多个参数进行编译时方法调用验证
- Flutter - 对同一个 JSON 的多个 HTTP 请求
- Java 访问同一类中另一个对象的私有字段
对同一类中的多个字段使用@Id(同一字段可以存放不同类型的数据)
我是Hibernate的新手,必须支持使用Hibernate的现有应用程序。这是一个纯报表应用程序-无需插入/更新/删除-仅选择
我可以看到在同一类的多个字段中使用了@Id注释的现有POJO对象
我的理解是,对于复合主键-您需要使用@Embeddable和@EmbeddedId
但是,这没有在我的课程中定义,奇怪的是代码可以编译并正常运行
这是我的代码的示例:
package com.xyz.vo;import java.io.Serializable;import javax.persistence.*;import org.hibernate.annotations.GenericGenerator;@Entity(name="com.xyz.vo.Emp")@Table(name = "TEmployee")public class Emp implements Serializable {private java.lang.Integer empId;@Id @Column(name = "EMP_ID") public java.lang.Integer getEmpId(){ return this.empId;}public void setEmpId(java.lang.Integer empId){ this.empId=empId;}private java.lang.Integer empAge;@Id @Column(name = "EMP_AGE") public java.lang.Integer getEmpAge(){ return this.empAge;} public void setEmpAge(java.lang.Integer empAge){ this.empAge=empAge;} private String empName; @Column(name = "EMP_NAME") public String getEmpName(){ return this.empName;} public void setEmpName(String empName){ this.empName=empName;}
在pojo中还有更多字段-没有定义@Id
注意-这两个字段具有@Id批注
我很困惑为什么它可以编译和工作?谢谢akila
答案1
小编典典根据Hibernate文档,Hibernate似乎允许这样做,但是它不符合JPA。
5.1.2.1.2。没有标识符类型的多个id属性
另一种可能更自然的方法是将@Id放在实体的多个属性上。Hibernate仅支持此方法(不符合JPA),而不需要额外的可嵌入组件。
http://docs.jboss.org/hibernate/core/3.6/reference/zh-
CN/html_single/#d0e4819
对于符合JPA的解决方案,您必须为此设置指定其他@IDClass(或使用EmbeddedId):
http://www.objectdb.com/java/jpa/entity/id
c# – 同一类中的单元测试(带条件编译)?
在过去,我通过制作我需要测试保护的东西,并创建一个我可以用来在测试框架中获取它的子类来解决这些情况.但是对于应该密封的课程来说,这种方法效果不佳.更不用说用所有脚手架膨胀测试框架.
所以我正在考虑这样做:在课堂上放置一些测试,他们可以在那里找到私人成员.但是使用’#if DEBUG`将它们排除在生产代码之外.
这看起来是个好主意吗?
解决方法
OP问题的解决方案是将IoC与DI正确合并,并且无需完全测试私有方法(如Joel Martinez noted).正如multiple times所述,对私人成员进行单元测试是不可取的.
但是,有时您无法更改代码(遗留系统,破坏更改的风险 – 您的名字),也无法使用允许私有成员测试的工具(如Typemock,即付费产品).对于这种情况,您可以根本不进行测试,也可以偷工减料.我相信OP的情况正面临着.
抛开私人方法测试讨论……
请记住,您可以使用反射来访问和调用私有成员.
在我看来,在类本身中放置条件调试是一个相当糟糕的想法 – 它会在类代码中添加噪声(如不相关的内容).当然,它将在发布时消失,但你(可能还有其他程序员)将不得不在日常基础上处理它.
我意识到你的想法在纸上听起来不错 – 用条件调试包装的简单测试.但实际上,测试很快就会变成使用额外的变量(那些也必须放在类代码中),一些实用程序(额外的引用,自定义类型),测试框架(甚至更多的引用)以及什么不是.这一切都必须以某种方式连接到类代码.把它们放在一起,你很快就会找到一个无法造意的怪物.
你确定要处理它吗?特别是考虑到将简单的基于反射的实用程序放在一起可能并不那么难.
c# – 对同一类型的多个参数进行编译时方法调用验证
class Program { static double Func(double a,double b) { return a * 1000 + b * b; } static void Main(string[] args) { var a = 1.1d; var b = 2.2d; Console.WriteLine(Func(a,b)); // this is the problem,function doesn't recognize when a and b // "accidentally" exchanged,target is to make this row a compile-time error Console.WriteLine(Func(b,a)); } }
如果存在具有许多参数的方法(例如,十个双重类型),这将成为一个问题:
double Func(double parameter1,double parameter2,...,double parameter10);
问题:有没有办法在调用方法时验证参数,这样程序员不太容易出错?
如果参数类型不同,这不是问题.我认为包装成新类型的东西会有所帮助:
class A { private double _value; public static implicit operator A(double value) { return new A() { _value = value }; } public static implicit operator double(A value) { return value._value; } } class B { private double _value; public static implicit operator B(double value) { return new B() { _value = value }; } public static implicit operator double(B value) { return value._value; } } class Program { static double Func(A a,B b) { return a * 1000 + b * b; } static void Main(string[] args) { A a = 1.1d; B b = 2.2d; Console.WriteLine(Func(a,b)); Console.WriteLine(Func(b,a)); // compile-time error! yay! Console.WriteLine(Func(a,b) + 123.123d - a * 2); // implicit conversion power Console.ReadKey(); } }
它确实如此,但我不确定这种方法是否有效.我怀疑这是不是一个好主意.是吗?还是有更好的一个?
如果我总是调用这样的方法(使用named arguments方法调用),我知道我绝对安全
Func(a:a,b:b);
这不应该给代码带来任何开销,而是大量的输入.包装更好,因为它完成一次(创建新类型很容易),但它可能有开销.
解决方法
>正如Mehrzad建议的那样,考虑按某种类型对参数进行分组.例如,考虑双倍距离(点p1,点p2),而不是双倍距离(双倍x1,双倍y1,双倍x2,双倍y2).
>通常,如果您的方法有超过4-5个参数,请考虑重构.也许你的方法试图做太多的事情,逻辑可以划分?
>如果您真正想要做的是执行一些检查,例如确保< b,考虑查看Code contracts.您也可以使用Debug.Assert(),但这仅适用于运行时.>我不建议您提出的那种隐式转换.对我来说,除了编译时检查参数之外,A a = 1.1应该没有语义目的,这让人感觉很乱,而且不直观.您的最终目标是使代码整体更易于维护.
Flutter - 对同一个 JSON 的多个 HTTP 请求
如果您的 API 仅返回单个 Schedule 对象,则需要修改您的方法以获取单个元素。
Future<Schedule> getFromEspnSchedule(String sport) async {
final url = 'http://myserver.com/api/$date';
final response = await http.get(url);
if (response.statusCode == 200) {
return Schedule.fromJson(json.decode(response.body));
} else {
// make sure you return API error here
}
}
执行此操作后,您可以继续将其链接到同时进行的多个调用中,以更快地获取数据:
List<Schedule> responseList = await Future.wait([
getFromEspnSchedule('football'),getFromEspnSchedule('volleyball'),getFromEspnSchedule('basketball'),getFromEspnSchedule('chess'),]);
// responseList objects are listed the same way they are called above.
Schedule footballSchedule = responseList[0];
Schedule volleyballSchedule = responseList[1];
Schedule basketballSchedule = responseList[2];
Schedule chessSchedule = responseList[3];
Java 访问同一类中另一个对象的私有字段
如何解决Java 访问同一类中另一个对象的私有字段?
private修饰符强制执行封装原理。
这个想法是,“外部世界”不应更改Person内部流程,因为Person的实现可能会随时间而变化(并且你将不得不更改整个外部世界以解决实现方面的差异-这几乎是不可能的)。
当Person实例访问其他Person实例的内部时-你可以确保两个实例始终了解Person的实现细节。如果更改了Person过程的内部逻辑-你要做的就是更改Person的代码。
解决方法
class Person
{
private BankAccount account;
Person(BankAccount account)
{
this.account = account;
}
public Person someMethod(Person person)
{
//Why accessing private field is possible?
BankAccount a = person.account;
}
}
请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限?
我们今天的关于对同一类中的多个字段使用@Id和同一字段可以存放不同类型的数据的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 同一类中的单元测试(带条件编译)?、c# – 对同一类型的多个参数进行编译时方法调用验证、Flutter - 对同一个 JSON 的多个 HTTP 请求、Java 访问同一类中另一个对象的私有字段的相关信息,可以在本站进行搜索。
本文标签: