我们可以使用类对象在函数之间传递数据。就像我上课一样
public class AddsBean
{
public long addId{get;set;}
public int bid { get; set; }
public long pointsAlloted { get; set; }
public string userId { get; set; }
public enum isApproved { YES, NO };
public DateTime approveDate { get; set; }
public string title { get; set; }
public string description { get; set; }
public string Link { get; set; }
public DateTime dateAdded { get; set; }
}
我们可以调用像public List<AddsBean> getAdds(string Id)
这样的函数。当你需要类的所有变量时,这种方法很好。 但是如果你只需要2或3个类的变量呢?
传递类的对象并不好,因为它会浪费内存。另一种可能的解决方案是制作不同类别的较小变量,但这是不实际的。
我们应该做些什么才能最好地解决问题,以达到动力和最佳表现呢?
答案 0 :(得分:1)
在Java中 - “对象的引用按值传递”。所以,你不传递整个对象,只需将对象的引用传递给被调用的函数。
EG:
class A{
int i;
int j;
double k;
}
class B{
public static void someFunc(A a) // here 'a' is a reference to an object, we dont pass the object.
{
// some code
}
public static void main(String[] args){
A a = new A();
B.someFunc(a); // reference is being passed by value
}
}
答案 1 :(得分:1)
首先,由于Java按值传递并且引用了类型,因此无需担心内存浪费。
接下来,正如你所提到的,如果你不需要它们就传递所有对象是不好的,在某些情况下,这是真的。因为您需要在实例中保护您的数据,因此您可以使用不同的类的粒度,例如:
class A
{id, name}
class B extends A
{password,birthday}
通过引用不同的类,您可以自己控制粒度,并为不同的客户端提供不同的数据范围。
但在某些情况下,您需要使用实例来存储整个应用程序中的所有数据,例如configure data
中的hadoop
或其他一些与配置相关的实例。
尝试选择最合适的范围!
答案 2 :(得分:1)
如果您确定这是问题的根源,并且您不想使用属性的子集定义新类,则.NET提供Tuple
类来分组少量相关的领域。例如,Tuple<int, int, string>
按顺序包含两个整数和一个字符串。
public Tuple<string, long, DateTime> GetPointsData()
{
AddsBean bean = ... // Get your AddsBean somehow
return Tuple.Create<string, long, DateTime>(bean.userId, bean.pointsAlloted, bean.approveDate);
}
一旦此方法超出范围,就不再对所引用的对象bean
进行实时引用,并且将在未来某个时间由垃圾收集器收集。
尽管如此,除非您确定AddsBean
课程的实例对您的应用程序的性能有明显的负面影响,否则您不必担心。您的应用程序的性能可能会受到其他操作的影响。返回引用类型(使用class
而不是struct
定义的类型)仅传递对象的引用,而不是对象本身的数据。